[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-5440?page=c...
]
SebastianB commented on HHH-5440:
---------------------------------
Hi,
I still have this kind of problem.
I have 2 Entites (Employee/Projects, m:n) and so both of them have a Set of each other:
Employee has Set<Project> and Project has Set<Employee>.
Now I want to get all Employees they belong to given Projects:
Set<Project> projects = new HashSet<Project>();
projects.add(...);
List<Predicate> predicates = new ArrayList<Predicate>();
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Employee> query = criteriaBuilder.createQuery(Employee.class);
Root<Employee> root = queryfrom(Employee.class);
predicates.add(cb.in(root.get("projects")).value(values));
return em.createQuery(query.where(cb.and(predicates.toArray(new
Predicate[0]))).distinct(true)).getResultList()
Exception in thread "main" java.lang.IllegalArgumentException: Parameter value
[hibernate.test.Project@7f8062] was not matching type [java.util.Set]
at
org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:340)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:364)
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:441)
at
hibernate.test.DefaultCriteriaBuildCommand.executeQuery(DefaultCriteriaBuildCommand.java:143)
at hibernate.test.EmployeeConditionBuilder.getResults(EmployeeConditionBuilder.java:83)
at hibernate.test.DBAccessManager.getElements(DBAccessManager.java:127)
at hibernate.test.TestumgebungClient.<init>(TestumgebungClient.java:38)
at hibernate.test.TestumgebungClient.main(TestumgebungClient.java:46)
Enviroment:
java version 1.6.0_16
hibernate-core 3.6.0.Final
Windows XP SP3
Thanks in advance
Sebastian
Joined collection expressions not properly "rendered" in
JPA Criteria queries
-----------------------------------------------------------------------------
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.6.0.Beta4, 3.5.6
Attachments: hibernate-bug.zip
Time Spent: 2h 44m
Remaining Estimate: 0h
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira