mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Fix for #151 - IllegalArgumentException using enum in filter - toBeanType() throws
This commit is contained in:
@@ -103,13 +103,12 @@ public class ScalarTypeEnumStandard {
|
||||
return ((Enum<?>)beanValue).toString();
|
||||
}
|
||||
|
||||
public Object toBeanType(Object dbValue) {
|
||||
if (dbValue == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Enum.valueOf(enumType, (String)dbValue);
|
||||
}
|
||||
public Object toBeanType(Object dbValue) {
|
||||
if (dbValue == null || dbValue instanceof Enum<?>) {
|
||||
return dbValue;
|
||||
}
|
||||
return Enum.valueOf(enumType, (String) dbValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -183,8 +182,8 @@ public class ScalarTypeEnumStandard {
|
||||
* Convert the db value to the Enum value.
|
||||
*/
|
||||
public Object toBeanType(Object dbValue) {
|
||||
if (dbValue == null) {
|
||||
return null;
|
||||
if (dbValue == null || dbValue instanceof Enum<?>) {
|
||||
return dbValue;
|
||||
}
|
||||
|
||||
int ordinal = ((Integer)dbValue).intValue();
|
||||
|
||||
@@ -72,6 +72,9 @@ public class ScalarTypeEnumWithMapping extends ScalarTypeEnumStandard.EnumBase i
|
||||
}
|
||||
|
||||
public Object toBeanType(Object dbValue) {
|
||||
if (dbValue == null || dbValue instanceof Enum<?>) {
|
||||
return dbValue;
|
||||
}
|
||||
return beanDbMap.getBeanValue(dbValue);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.avaje.ebean;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.avaje.tests.model.basic.Order;
|
||||
import com.avaje.tests.model.basic.ResetBasicData;
|
||||
|
||||
public class TestFilterWithEnum extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
List<Order> allOrders = Ebean.find(Order.class).findList();
|
||||
|
||||
Filter<Order> filter = Ebean.filter(Order.class);
|
||||
List<Order> newOrders = filter.eq("status", Order.Status.NEW).filter(allOrders);
|
||||
|
||||
Assert.assertNotNull(newOrders);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.avaje.ebeaninternal.server.type;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.avaje.ebeaninternal.server.type.ScalarTypeEnumStandard.OrdinalEnum;
|
||||
import com.avaje.ebeaninternal.server.type.ScalarTypeEnumStandard.StringEnum;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import com.avaje.tests.model.basic.Order;
|
||||
|
||||
public class TestEnumToBeanType {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
StringEnum stringEnum = new ScalarTypeEnumStandard.StringEnum(Order.Status.class);
|
||||
|
||||
OrdinalEnum ordinalEnum = new ScalarTypeEnumStandard.OrdinalEnum(Order.Status.class);
|
||||
|
||||
EnumToDbValueMap<?> beanDbMap = EnumToDbValueMap.create(false);
|
||||
beanDbMap.add(Customer.Status.ACTIVE, "A");
|
||||
beanDbMap.add(Customer.Status.NEW, "N");
|
||||
beanDbMap.add(Customer.Status.INACTIVE, "I");
|
||||
|
||||
ScalarTypeEnumWithMapping withMapping = new ScalarTypeEnumWithMapping(beanDbMap, Customer.Status.class, 1);
|
||||
|
||||
|
||||
Object approved = stringEnum.toBeanType(Order.Status.APPROVED);
|
||||
Assert.assertTrue(approved == Order.Status.APPROVED);
|
||||
|
||||
approved = ordinalEnum.toBeanType(Order.Status.APPROVED);
|
||||
Assert.assertTrue(approved == Order.Status.APPROVED);
|
||||
|
||||
Object active = withMapping.toBeanType(Customer.Status.ACTIVE);
|
||||
Assert.assertTrue(active == Customer.Status.ACTIVE);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,7 +14,7 @@ import javax.persistence.Transient;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
|
||||
import com.avaje.ebean.annotation.EnumMapping;
|
||||
import com.avaje.ebean.annotation.EnumValue;
|
||||
import com.avaje.ebean.annotation.Where;
|
||||
|
||||
/**
|
||||
@@ -28,12 +28,16 @@ public class Customer extends BasicDomain {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* EnumMapping is an Ebean specific mapping for enums.
|
||||
* EnumValue is an Ebean specific mapping for enums.
|
||||
*/
|
||||
@EnumMapping(nameValuePairs="NEW=N,ACTIVE=A,INACTIVE=I")
|
||||
public enum Status {
|
||||
@EnumValue("N")
|
||||
NEW,
|
||||
|
||||
@EnumValue("A")
|
||||
ACTIVE,
|
||||
|
||||
@EnumValue("I")
|
||||
INACTIVE
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user