Hibernate - getResultList() 返回多个第一行.春天



这是我的会话

String query = "from Authority";
session = sessionFactory.openSession();
List<Authority> authorities= session.createQuery(query).getResultList();
session.close();
for(Authority a: authorities){
System.out.println(a.getEmail());
}

这是我的用户类:

@Entity
@Table(name = "users")
public class User {
@Id
@NotBlank
@Size(max = 100)
@Email
@Column
private String email;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", orphanRemoval = true)
private Set<Authority> authorities = new HashSet<>();

这是我的权威类:

@Entity
@Table(name = "authorities")
public class Authority {
@Id
@Column
private String authority;
@ManyToOne
@JoinColumn(name = "email")
private User user;

当我想显示我的结果时,我在每次"for"迭代中都会得到第一行。 你知道为什么会这样吗?

假设在我的数据库中有这样的行:

email1@server.com  ROLE_USER
email2@server.com  ROLE_USER
email3@server.com  ROLE_USER
email4@server.com  ROLE_USER

由于这个"为"是:

email1@server.com
email1@server.com
email1@server.com
email1@server.com

映射中存在几个问题。

第一个问题是表中authority列不是主键authorities。用注释标记它是不正确Id这会混淆休眠。

第二个(也是主要的(问题是,根据您的模型,每个用户可能有多个权限,但您的数据表明每个Authority可能与许多用户相关。似乎authorities表对UserAuthority实体之间的多对多关系进行建模,而映射试图将其拟合为一对多关系。

最新更新