Как избежать дублирования с каскадами JPA?

У меня есть Parent объект с Дочерний объект в отношении ManyToOne :

@Entity class Parent {
  // ...
  @ManyToOne((cascade = {CascadeType.ALL})
  private Child child;
  // ...
}

Дочерний объект имеет уникальное поле:

@Entity class Child {
  // ...
  @Column(unique = true)
  private String name;
  // ...
}

Когда мне нужен новый Дочерний , я сначала спросите ChildDAO :

Child child = childDao.findByName(name);
if(child == null) {
  child = new Child(name);
}

Parent parent = new Parent();
parent.setChild(child);

Проблема в том, что если я сделаю то же самое, что и дважды (с тем же именем для Child ), и сохраню только Родитель в конце, я получаю исключение ограничения. Это кажется нормальным, поскольку изначально в базе данных не было дочернего элемента с указанным именем.

Проблема в том, что я не уверен, что будет лучший способ избежать этой ситуации.

9
задан Cos64 27 November 2011 в 19:50
поделиться