Не удается получить дочерние элементы с помощью JPA - PullRequest
0 голосов
/ 01 августа 2020

Я использую JPA в своем загрузочном приложении Spring и столкнулся со следующей проблемой. Между User -> Letter

User entity

@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Letter> letters;

Letter Entity

@Entity
public class Letter {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id")
    private User user;

существует отношение oneToMany. Этот код работает правильно в следующем сценарии:

        Letter letter = new Letter();
        Set<Letter> letters = new HashSet<>();
        letters.add(letter);

        User user = new User();
        user.setLetters(letters);
        User newUser = controller.createUser(user);

        User retrievedUser = controller.getUser(newUser.getId());
        retrievedUser.getLetters() // contains letter

но когда я хочу сначала создать пользователя, а затем добавить письмо, он не работает должным образом

        User user = new User();
        User newUser = controller.createUser(user);

        Letter letter = new Letter();
        letter.setUser(newUser);
        Letter newLetter = controller.createLetter(letter);

        User retrievedUser = controller.getUser(newUser.getId());
        retrievedUser.getLetters() // is null

Я не эксперт по JPA, но я не понимаю, почему это не работает, во-вторых чехол?

1 Ответ

0 голосов
/ 01 августа 2020

Вы не выполнили user.setLetters(letters); во втором примере. Как я уже говорил в комментарии, добавьте методы синхронизации, чтобы избежать подобных ошибок.

Посмотрите, например, этот блог Как синхронизировать двунаправленные ассоциации сущностей с JPA и Hibernate

...