我有两个表(实体):
@Entity
@Table(name = "users")
@NamedQuery(name = "User.getAll", query = "SELECT c from User c")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@NotNull
@Column(name = "LOGIN")
private String login;
@Column(name = "PASSWORD", length = 64)
private String password;
@Column(name = "SALT", length = 80)
private String salt;
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
private Set<Role> roles;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Permission> permissions;
和
@Entity
@Table(name = "roles")
@NamedQuery(name = "Role.getAll", query = "SELECT c from Role c")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "ROLE_NAME", length = 100)
private String roleName;
@ManyToMany(mappedBy = "roles")
private Set<User> users;
以及选择用户的方法:
@Override
public List<User> getUsersList() {
Criteria criteria = getSession().createCriteria(User.class);
return (List<User>)criteria.list();
}
我有 2 个用户。第一个用户有 2 个角色,第二个用户有 1 个角色。 但是这个方法返回了 3 个用户。具有 2 个角色的用户是重复的。
我尝试了 criteria.createCriteria("", JoinType.NONE);
但这并没有帮助。
最佳答案
你需要使用criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
,检查:
criteria-distinct-root-entity-vs-projections-distinct
关于java - 如何在 Hibernate jpa 中正确选择具有 OneToMany 关系的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34488146/