Correction to be able to find on object with Enum as id.

This commit is contained in:
Jacques
2013-04-10 18:19:59 +02:00
parent 4a618189d2
commit dcae62e9ee
3 changed files with 82 additions and 1 deletions
@@ -163,7 +163,9 @@ public final class IdBinderSimple implements IdBinder {
}
public void bindId(DataBind dataBind, Object value) throws SQLException {
value = idProperty.toBeanType(value);
if( !value.getClass().equals(expectedType) ){
value = scalarType.toBeanType(value);
}
idProperty.bind(dataBind, value);
}
@@ -9,6 +9,7 @@ import com.avaje.ebean.SqlQuery;
import com.avaje.ebean.SqlRow;
import com.avaje.tests.model.basic.EBasic;
import com.avaje.tests.model.basic.EBasic.Status;
import com.avaje.tests.model.basic.EBasicEnumId;
public class TestEnumValueAnnotation extends TestCase {
@@ -42,4 +43,28 @@ public class TestEnumValueAnnotation extends TestCase {
}
public void testAsId(){
EBasicEnumId b = new EBasicEnumId();
b.setName("Banana");
b.setStatus(EBasicEnumId.Status.NEW);
Ebean.save(b);
SqlQuery q = Ebean.createSqlQuery("select * from e_basic_enum_id where status = :status");
q.setParameter("status", b.getStatus());
SqlRow sqlRow = q.findUnique();
String strStatus = sqlRow.getString("status");
Assert.assertEquals("N", strStatus);
try{
b = Ebean.find(EBasicEnumId.class, b.getStatus());
}catch(java.lang.IllegalArgumentException iae){
fail("The use of an enum as id should work : " + iae.getLocalizedMessage() );
}
Assert.assertEquals(EBasicEnumId.Status.NEW, b.getStatus());
}
}
@@ -0,0 +1,54 @@
package com.avaje.tests.model.basic;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import com.avaje.ebean.annotation.EnumValue;
@Entity
@Table(name="e_basic_enum_id")
public class EBasicEnumId {
public enum Status {
@EnumValue("N")
NEW,
@EnumValue("A")
ACTIVE,
@EnumValue("I")
INACTIVE,
}
@Id
Status status;
String name;
String description;
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}