Я работаю над проектом с некоторыми необычными отношениями сущностей, у меня проблемы с JPA. Есть два важных объекта; User, и давайте назовем другой 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 entity]
@ManyToOne()
@JoinColumn(name="user_id")
private User user;
При сохранении нового пользователя я также хочу сохранить две сущности x (одну для activeX1 и одну для activeX2) в одной транзакции. Jpa странно справляется с этой abit, лог выглядит так:
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 действительно явно пытается работать против меня в этой операции. Любая помощь будет оценена по достоинству.