首页 > 解决方案 > 无法使用 JPA 获取子项目

问题描述

我在我的 Spring Boot 应用程序中使用 JPA,我遇到了以下问题。User -> Letter 之间存在 oneToMany 关系

用户实体

@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

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

字母实体

@Entity
public class Letter {

    @Id
    @GeneratedValue
    private Long id;

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

此代码在以下情况下正常工作:

        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 专家,但我不明白为什么它不起作用是第二种情况?

标签: javadatabasehibernatejpaspring-data-jpa

解决方案


你没有user.setLetters(letters);在你的第二个例子中表演。正如我在评论中已经说过的那样,添加同步方法以避免这种错误。

例如查看此博客 如何将双向实体关联与 JPA 和 Hibernate 同步


推荐阅读