Я работаю над проектом с некоторыми необычными отношениями сущностей, которые у меня не решаются с 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 действительно, кажется, явно пытается работать против меня в этой операции. Любая помощь будет оценена.