Hibernate - getResultList () возвращает умноженную первую строку.весна - PullRequest
0 голосов
/ 26 мая 2018

Это мой сеанс

    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;

Как я хочуотображая мои результаты, я получаю первую строку в каждой итерации «за».У вас есть идеи, почему это происходит?

Допустим, что в моей базе данных есть строки, такие как:

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

В результате это "for" выглядит так:

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

1 Ответ

0 голосов
/ 26 мая 2018

В отображении есть несколько проблем.

Первая проблема заключается в том, что столбец authority в таблице authorities не является первичным ключом.Неверно помечать его аннотацией Id, и это приводит к путанице в спящем режиме.

Вторая (и основная) проблема заключается в том, что согласно вашей модели у каждого пользователя может быть несколько прав доступа, но ваши данные свидетельствуют о том, что каждый Authority может быть связано со многими пользователями.Кажется, что таблица authorities моделирует отношения «многие ко многим» между User и Authority сущностями, в то время как отображение пытается вписать ее в отношение «один ко многим».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...