Witam,
może mi ktoś powiedzieć jak się wyciąga dane przy relacji ManyToMany, przykladowo:
@Entity
@Table(name="role_tab", schema="app")
public class Role extends BaseEntity implements Routable {
@Id @GeneratedValue @Column(name = "role_id")
private Long role_id;
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="role_user_tab",
joinColumns={@JoinColumn(name="role_id")},
inverseJoinColumns={@JoinColumn(name="role_id")})
private Set<User> users = new HashSet<User>();
@Entity
@Table(name="user_tab", schema="acl")
public class User {
@Id @GeneratedValue @Column(name = "user_id")
private Long user_id;
@Email @NotEmpty
private String email;
@NotEmpty
private String password;
@ManyToMany(mappedBy="users")
private Set<Role> roles = new HashSet<Role>();
i teraz w dao uzywam criteriabuildera.
Probowalem tak:
public List<Role> byField(Map<String, Object> params) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Role> query = cb.createQuery(Role.class);
Root<Role> root = query.from(Role.class);
List<Predicate> criteriaList = new ArrayList<Predicate>();
for (Map.Entry<String, Object> entry : params.entrySet()) {
Predicate p = cb.equal(root.get(entry.getKey()), entry.getValue());
criteriaList.add(p);
}
query.where(cb.and(criteriaList.toArray(new Predicate[] {})));
return em.createQuery(query).getResultList();
}
W każdym razie chciałem uzyskać taki efekt, że mając usera chciałem wyciągnąć wszystkie jego Role.
Błąd w skrócie jaki dostawałem to:
...
Caused by: org.hibernate.exception.DataException: could not extract ResultSet
...
Caused by: org.postgresql.util.PSQLException: Nie podano wartości dla parametru 1.
...
thx