Hibernate @ManyToMany wyciąganie danych

0

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

0

Jeszcze jedno. Chodzi mi generalnie o relacje ManyToMany tak jak podałem w opisie ale jak wynika z przedstawionego przeze mnie problemu user i rola nie są tworzone razem. Tzn jak tworzony jest user to przypisywane są do niego już istniejące Role i na odwrót. Nie mogę znaleźć takiego przykładu.

0

jak jesteś w transakcji po prostu role.getUsers(); i tyle

0
karolinaa napisał(a):

jak jesteś w transakcji po prostu role.getUsers(); i tyle

A masz może jakiś szerszy przykład do pokazania?

1 użytkowników online, w tym zalogowanych: 0, gości: 1