Mam więc tabelę użytkowników, tabelę projektów i tabelę użytkowników. Mam jednego użytkownika, który jest podłączony do 2 projektów, ale kiedy mam tylko jedną rolę dla niego, zwraca te 2 projekty, ale jeśli mam 2 role dla niego, zwraca 4 role (2x2 projekty). Jak mogę zapobiecHibernacja zwraca duplikat, ponieważ inna tabela ma zduplikowane wartości.
To jest mój kod powrocie listę projektów dla użytkownika
@Override
public List<Project> retrieve(User user) {
Criteria criteria = super.createCriteria();
criteria.addOrder(Order.desc("date"));
criteria.createCriteria("users").add(Restrictions.eq("id", user.getId()));
return (List<Project>) criteria.list();
}
mapowania w klasie User
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Users_Projects",
joinColumns = @JoinColumn(name = "UserID"), inverseJoinColumns = @JoinColumn(name = "ProjectID"))
public List<Project> getProjects() {
return projects;
}
@ElementCollection(fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@Column(name = "RoleType")
@JoinTable(name = "User_Roles", joinColumns = @JoinColumn(name = "UserID"))
public Set<Role> getRoles() {
return roles;
}
Wszelkie sugestie jaki jest problem?
tnx
dziękuję! pracował jak urok, czy możesz jednak wyjaśnić, dlaczego ładowanie ról do tego doprowadzi. Jestem również pewien, że tak jest, ale po prostu nie rozumiem, dlaczego ustawienie czegoś, co nie jest częścią połączenia użytkowników-projektów, powoduje to. jakieś pomysły? –
Zobacz moją aktualizację na nieco więcej na pytanie w komentarzu. –