diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java index 944fef87c..3e3823888 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java @@ -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); } diff --git a/src/test/java/com/avaje/tests/basic/type/TestEnumValueAnnotation.java b/src/test/java/com/avaje/tests/basic/type/TestEnumValueAnnotation.java index 33bd070b6..1946de31d 100644 --- a/src/test/java/com/avaje/tests/basic/type/TestEnumValueAnnotation.java +++ b/src/test/java/com/avaje/tests/basic/type/TestEnumValueAnnotation.java @@ -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()); + } + } diff --git a/src/test/java/com/avaje/tests/model/basic/EBasicEnumId.java b/src/test/java/com/avaje/tests/model/basic/EBasicEnumId.java new file mode 100644 index 000000000..2d4ac0bd0 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/basic/EBasicEnumId.java @@ -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; + } +}