Мне приходится иметь дело с циклическими зависимыми отношениями, на которые я не могу влиять, и я довольно новичок в JPA.Сохраняющиеся циклически зависимые объекты
Так Entity есть члены одного и то же лицо, и я решил, что с помощью:
@Entity
@Table("A")
public class A {
@ManyToMany
@JoinTable(name = "A_HAS_SUBAS",
joinColumns = {@JoinColumn(name = "A_ID")},
inverseJoinColumns = {@JoinColumn(name = "SUBA_ID")})
private Set<A> as;
}
При записи в БД У меня есть проблема, что Hibernate, кажется, не знает, где А должно быть сохранено первым. Я попытался решить эту проблему, удалив все отношения из A, записывая в БД и восстанавливая отношения впоследствии через спящий режим.
Это похоже на работу, но, похоже, не работает, если A
не имеет SubAs
, и это не соответствует моему пониманию проблемы. Поэтому я, конечно, ошибаюсь.
Платформа Entity без отношений сохраняется на внутренней сделки:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
private void immediatelySaveNewEntity(A entity) {
try {
if (!dao.entityExistsFromId((int) entity.getId())) { dao.save(entity); }
} catch (Exception e) {
e.printStackTrace();
}
}
В результате я получаю
ORA-02291: целостность ограничение (...) нарушается - родительский ключ не найдено
Я могу обойти эту проблему, удалив ограничения из БД, но это не мой предпочтительный способ справиться с этим.