From 4a618189d2bf6168d633ca0d5ceec5b72ee66433 Mon Sep 17 00:00:00 2001 From: Jacques Date: Wed, 10 Apr 2013 17:18:02 +0200 Subject: [PATCH 1/2] Small correction of the error message --- .../com/avaje/ebeaninternal/server/type/EnumToDbValueMap.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/EnumToDbValueMap.java b/src/main/java/com/avaje/ebeaninternal/server/type/EnumToDbValueMap.java index d481f5025..8b8857f92 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/EnumToDbValueMap.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/EnumToDbValueMap.java @@ -68,7 +68,7 @@ public abstract class EnumToDbValueMap { public Iterator beanValues() { return valueMap.values().iterator(); } - + /** * Bind using the correct database type. */ @@ -111,7 +111,7 @@ public abstract class EnumToDbValueMap { } T dbValue = keyMap.get(beanValue); if (dbValue == null && !allowNulls) { - String msg = "DB value for " + beanValue + " not found in " + valueMap; + String msg = "DB value for " + beanValue + " not found in " + keyMap; throw new IllegalArgumentException(msg); } return dbValue; From dcae62e9ee9cacd3ba83c01463a047b6569ea9f1 Mon Sep 17 00:00:00 2001 From: Jacques Date: Wed, 10 Apr 2013 17:20:41 +0200 Subject: [PATCH 2/2] Correction to be able to find on object with Enum as id. --- .../server/deploy/id/IdBinderSimple.java | 4 +- .../basic/type/TestEnumValueAnnotation.java | 25 +++++++++ .../avaje/tests/model/basic/EBasicEnumId.java | 54 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/avaje/tests/model/basic/EBasicEnumId.java 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; + } +}