Bug 427 : Binding enum on find throws No ScalarType registered
Priority 
High
Reported Version 
 
Logged By 
Ariel Scarpinelli
Status 
Fixed
Fixed Version 
3.x
Assigned To 
 
Product 
Ebean - core
Duplicate Of 
 
Created 
26/09/2012
Updated 
26/09/2012
Type 
Bug
 
Attachments 
No attachments

Lets asume a Role class:

@Entity
public class Role extends Model {

@Id
@Constraints.Required
public Integer id;

@Constraints.Required
@Formats.NonEmpty
@Enumerated(EnumType.STRING)
public RoleNameEnum name; // name is enum value
}


with a RoleNameEnum like this

public enum RoleNameEnum {
@EnumValue("regular")
REGULAR,
@EnumValue("admin")
ADMIN

}


In some test I try to find users by role:

List users = User.findByRole(Role.findByRoleName(RoleNameEnum.ADMIN));

where method findByRoleName() is following:

public static List findByRole(Role role) {
return Ebean.find(User.class).where().eq("role", role).findList();
}

It ends up throwing an exception:

[error] Test UserTest.findUsersByRole failed: No ScalarType registered for class models.Role
[error] at com.avaje.ebeaninternal.server.persist.Binder.bindObject(Binder.java:183)
[error] at com.avaje.ebeaninternal.server.query.CQueryPredicates.bind(CQueryPredicates.java:162)
[error] at com.avaje.ebeaninternal.server.query.CQuery.prepareBindExecuteQuery(CQuery.java:413)
[error] at com.avaje.ebeaninternal.server.query.CQueryEngine.findMany(CQueryEngine.java:198)
[error] at com.avaje.ebeaninternal.server.query.DefaultOrmQueryEngine.findMany(DefaultOrmQueryEngine.java:104)
[error] at com.avaje.ebeaninternal.server.core.OrmQueryRequest.findList(OrmQueryRequest.java:344)
[error] at com.avaje.ebeaninternal.server.core.DefaultServer.findList(DefaultServer.java:1469)
[error] at com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery.findList(DefaultOrmQuery.java:906)
[error] at com.avaje.ebeaninternal.util.DefaultExpressionList.findList(DefaultExpressionList.java:201)
[error] at models.User.findByRole(User.java:63)
[error] at UserTest$4.run(UserTest.java:62)
[error] at play.test.Helpers.running(Helpers.java:294)
[error] at UserTest.findUsersByRole(UserTest.java:58)


Seems that bindObject is not detecting the enum and trying to use the mapped enumvalue instead of the enum object instance itself.

Thanks!

 
woResponse

Upload a file