无法使用JPA获取子项



我在Spring启动应用程序中使用JPA,遇到了以下问题。用户之间存在一对多关系->字母

用户实体

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

您尚未在第二个示例中执行user.setLetters(letters);。正如我在评论中已经说过的,添加同步方法可以避免这种错误。

例如,看看这个博客如何将双向实体关联与JPA和Hibernate 同步

最新更新