[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-5440) JPA 2.0 CriteriaBuilder API and CollectionOfElements
Steve Ebersole (JIRA)
noreply at atlassian.com
Thu Aug 5 10:50:40 EDT 2010
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5440?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steve Ebersole updated HHH-5440:
--------------------------------
Assignee: Steve Ebersole
Fix Version/s: 3.6.x
3.5.x
> JPA 2.0 CriteriaBuilder API and CollectionOfElements
> ----------------------------------------------------
>
> Key: HHH-5440
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5440
> Project: Hibernate Core
> Issue Type: Bug
> Affects Versions: 3.5.4
> Environment: hibernate-core 3.5.4, hibernate-entitymanager 3.5.4, hsqldb 2.0.0, mac os x 10.6, java 1.6.0_20
> Reporter: Koen Molkenboer
> Assignee: Steve Ebersole
> Fix For: 3.5.x, 3.6.x
>
>
> The situation is as follow:
> I have an User class which has a collection of elements which is a Set of Role enum values and I want to search for users which have one of more roles. I want to use the CriteriaBuilder, because I have a search form with a lot of fields which are optional.
> The User class:
> @Entity
> @Table(name = "USERS")
> @Access(AccessType.FIELD)
> public class User implements Serializable {
> @Id
> @GeneratedValue(strategy = GenerationType.AUTO)
> @Column(name = "ID")
> private Long id;
> @Column(name = "USERNAME", unique = true, nullable = false, length = 128)
> private String username;
> @ElementCollection
> @Enumerated(EnumType.STRING)
> @Column(name = "ROLE")
> @CollectionTable(name = "USER_ROLES", joinColumns = @JoinColumn(name = "USER_ID"))
> private Set<Role> roles = new HashSet<Role>();
> ...
> }
> The enum Role:
> public enum Role {
> ROLE_1, ROLE_2, ROLE_3;
> }
> Creating the query with the CriteriaBuilder
> Set<Role> roles = new HashSet<Role>();
> roles.add(Role.ROLE_1);
> roles.add(Role.ROLE_2);
> CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
> CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
> Root<User> root = criteriaQuery.from(User.class);
> criteriaQuery.where(root.join("roles").in(roles));
> TypedQuery<User> query = entityManager.createQuery(criteriaQuery);
> query.getResultList();
> This is the exception:
> java.lang.IllegalArgumentException: Parameter value [ROLE_2] was not matching type [java.util.Set]
> at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:360)
> at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:359)
> at org.hibernate.ejb.criteria.CriteriaQueryCompiler$1$1.bind(CriteriaQueryCompiler.java:194)
> at org.hibernate.ejb.criteria.CriteriaQueryCompiler.compile(CriteriaQueryCompiler.java:247)
> at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:437)
> ...
> This all works with OpenJPA 2.0.0
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list