[Hibernate-JIRA] Created: (HHH-6351) Enum Bug when using OK word inside of a enum being retrieved
by Lucas Arruda (JIRA)
Enum Bug when using OK word inside of a enum being retrieved
------------------------------------------------------------
Key: HHH-6351
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6351
Project: Hibernate Core
Issue Type: Bug
Components: annotations
Affects Versions: 3.6.5, 3.3.0.GA
Environment: Hibernate version 3.3.0.GA, 3.6.5.Final with hibernate-annotations 3.4.0.GA. Oracle database.
Reporter: Lucas Arruda
Priority: Minor
I have a class with a field which is an enum, which is mapped by a enum called Status.
The class is described (simplified and without all annotations) above:
public class A {
private Status status;
public enum Status { OK, NOK, NAP }
@Column(name = "STATUS")
@Enumerated(EnumType.STRING)
public Status getStatus() {
return status;
}
...
}
The thing is. I can store a record from A with status = 'OK', 'NOK' or 'NAP' perfectly. But, when I try to retrieve that record, if status = 'NOK' or 'NAP' it works correctly, but no with status = 'OK', which gives me an exception:
java.lang.IllegalArgumentException: Unknown name value for enum class com.a.b.c.d.A$Status: OK
at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:113)
...
Caused by: java.lang.IllegalArgumentException: No enum const class com.a.b.c.d.A$Status.OK
at java.lang.Enum.valueOf(Enum.java:196)
at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:110)
Reported a StackOverflow [1] and now one could solve this using 'OK' in the Enum.
What I did to solve this, since I couldn't get I done with OK, was to change a little bit the enum with this, which works correctly:
public enum Status {
_OK("OK"),
NOK("NOK"),
NAP("NAP");
private String desc;
public String getDesc() {
return desc;
}
private Status(String desc) {
this.desc = desc;
}
}
Since I couldn't make it work with 'OK', I highly suspect it's either a big mistake by my part or a bug, so I'm reporting it.
[1] http://stackoverflow.com/questions/6432933/hibernate-jpa-bug-not-recogniz...
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
13 years, 11 months
[Hibernate-JIRA] Created: (HHH-3724) Bug in determining the getter method for property
by Senthil (JIRA)
Bug in determining the getter method for property
--------------------------------------------------
Key: HHH-3724
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3724
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.3.1
Environment: hibernate-core-3.3.1.GA.jar, Oracle Express Edition 10g
Reporter: Senthil
Priority: Minor
I have an entity class with a property "String nextOnError" mapping to the database column "varchar nextOnError". I have a getter method "String getNextOnError()" defined in the class. But I also have another method "boolean isNextOnError()" for my other processing in the application. I was expecting hibernate would pick the getter method "String getNextOnError()" as the getter method but it is not. It is always picking the "boolean isNextOnError()" and resulting in "Class cast exception: java.lang.Boolean" during insertion. This is because, for each property, in the class "org.hibernate.property.BasicPropertyAccessor", the method "getterMethod(Class theClass, String propertyName)" is looping through all the getter methods with no arguments. The loop breaks when it finds any method starts with either "isNextOnError()" or "getNextOnError()". Unfortunately, in my case, it always ends up with "boolean isNextOnError()". I think the correct way is to check all the methods for starting with get... and if nothing is found, then start looking for method starting with 'is...' .
Thanks.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
13 years, 11 months
[Hibernate-JIRA] Created: (HSEARCH-1093) Smarter dirty checking with @Transient fields
by Marc Schipperheyn (JIRA)
Smarter dirty checking with @Transient fields
---------------------------------------------
Key: HSEARCH-1093
URL: https://hibernate.onjira.com/browse/HSEARCH-1093
Project: Hibernate Search
Issue Type: Improvement
Affects Versions: 4.1.0.Final
Reporter: Marc Schipperheyn
I found that if you have a field that is @Transient and depends on a Hibernate managed field, this field is not updated when the underlying field changes.
{code}
@ManyToOne
@JoinColumn
@IndexedEmbedded
public Photo getPhoto() {
return photo;
}
@Transient
@Field
public String getMugshot(){
if(photo == null)
return null;
return getUserDirectory() + "/" + photo.getFilename();
}
{code}
This makes sense. However, it's not desirable. I would therefore want to propose an annotation that can add some magic to dirty checking and inform Hibernate Search that when @Field x gets dirty, the @Transient field should also be considered dirty
Something like
{code}
@ManyToOne
@JoinColumn
@IndexedEmbedded
public Photo getPhoto() {
return photo;
}
@Transient
@Field
@AssociateDirty(fields={"photo"})
public String getMugshot(){
if(photo == null)
return null;
return getUserDirectory() + "/" + photo.getFilename();
}
{code}
There are many names one might give to such an annotation. E.g. @YouDirtyMeDirty, but many somehow sound a little "dirty" :-)
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
13 years, 11 months