Hibernate - getResultList()返回第一行的倍数。弹簧

时间:2018-05-25 23:14:19

标签: hibernate

这是我的会议

conda update --all

这是我的用户类:

    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<>();

当我想显示我的结果时,我会在每个&#39;中找到第一行。迭代。 你知道为什么会这样吗?

让我们说在我的数据库中有如下行:

@Entity
@Table(name = "authorities")
public class Authority {
    @Id
    @Column
    private String authority;

    @ManyToOne
    @JoinColumn(name = "email")
    private User user;

由于这个&#34;对于&#34;是:

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

1 个答案:

答案 0 :(得分:1)

映射中存在几个问题。

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

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