Je les classes suivantes:OneToMany avec Unidirectionnel clé étrangère n'insère pas à la table
@Entity
@Table(name = "PARENT")
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "PARENT_ID", unique = true, nullable = false, insertable = true, updatable = true)
private Long parentId;
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinColumn(name="PARENT_ID", nullable = false)
private List<Child> children;
public Parent(List<Child> children) {
this.children = children;
}
..
... Getters\Setters
}
@Entity
@Table(name = "CHILD")
public class Child {
@Id
@Column(name = "TYPE", unique = false, nullable = false)
private String type;
@Column(name = "RANK", unique = false, nullable = false, insertable = true, updatable = false)
private String rank;
}
Le « PARENT_ID » est clé étrangère dans le tableau « enfant ». donc il fait table "CHILD" ayant 2 colonnes formant son PRIMARY_KEY.
-je effectuer l'insertion suivante:
List<Child> children = new LinkedList<Child>();
children.add(new Child("1,2,3,4"));
children.add(new Child("1,2,3,4"));
Parent parent = new Parent(children);
session.save(parent);
Si les deux tables sont vides, il crée les entrées « parent » et « enfants » correctement en attribuant PARENT_ID !, MAIS si « enfant » sont existent déjà dans table il effectue la mise à jour au lieu de l'insérer! ATTENTION: les deux 'enfant' ont le même "TYPE" ("1,2,3,4"), mais ils doivent avoir un "PARENT_ID" différent.
Qu'est-ce qui me manque ici?
Merci!
ouais, cela pourrait fonctionner, mais maintenant une association bidirectionnelle qui est agréable, mais ajoute non nécessaire complexité au code. – Shvalb
Oui, vous pouvez avoir raison, Embedded et Embeddable pourrait être une meilleure approche. Cependant, le contexte dans lequel vous utiliserez ceci sera plus important – amitsalyan