我正在处理一个具有一些不寻常实体关系的项目,我在使用 JPA 时遇到了问题。有两个相关对象;用户,让我们调用另一个 X。用户与 X 有一对多和两个一对一的关系。它基本上看起来像这样
[用户实体]
@OneToMany(mappedBy="user", cascade=CascadeType.ALL, orphanRemoval=true)
private List<X> xList;
@OneToOne
@JoinColumn(name = "active_x1_id")
private X activeX1;
@OneToOne
@JoinColumn(name = "active_x2_id")
private X activeX2;
[X实体]
@ManyToOne()
@JoinColumn(name="user_id")
private User user;
在持久化一个新用户时,我还想在一个事务中持久化两个 x 实体(一个用于 activeX1,一个用于 activeX2)。Jpa 处理这个有点奇怪,日志看起来像这样:
INSERT INTO X VALUES (...) // x1
INSERT INTO USERS VALUES (...)
INSERT INTO X() VALUES (...) // x2
UPDATE USERS SET ...
UPDATE X VALUES (...) // updates x1
这使得不可能在数据库中使用 NOT NULL 约束。有没有更好的方法来处理这些多重关系?还是一种控制 JPA 保留对象的顺序的方法?JPA 似乎真的在这个操作中明确地试图对我不利。任何帮助,将不胜感激。