Comment éviter les doublons avec JPA cascades?

J'ai un Parent entité avec un Enfant entité dans un ManyToOne relation:

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

La Enfant a un champ unique:

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

Quand j'ai besoin d'un nouveau Enfant, je demande à la ChildDAO première:

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

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

Le problème est que si je fais comme ci-dessus deux fois (avec le même nom pour le Enfant), et ne persiste que l' Parent à la fin, j'obtiens une contrainte d'exception. Ce qui semble normal, car au début il n'y avait pas d'enfant dans la base de données avec le nom spécifié.

Le problème est, je ne suis pas sûr de ce que serait la meilleure façon d'éviter cette situation.

Êtes-vous sûr que votre modèle est bien? L'enfant peut avoir de nombreux Parents, et Parents peut avoir qu'un seul Enfant?
Ma réponse suppose une relation OneToOne - le commentaire ci-dessus est tout à fait exact, c'est un nom bizarre si elle est correcte.
Oui, le modèle est correct. J'ai renommé les entités pour l'exemple, et il semble que j'aurais pu faire mieux.

OriginalL'auteur Cos64 | 2011-11-27

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *