Hibernate insérer cascade de ne pas l'insertion de clé étrangère
J'ai deux entités:
@Entity
public class File
.......
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@OneToMany(fetch=FetchType.LAZY, mappedBy="file", cascade=CascadeType.ALL)
private List<Tag> tags;
.......
OTHER PROPERTIES
.......
@Entity
public class Tag
.......
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@ManyToOne
@JoinColumn(name="file_id")
private File file;
@Column
private String tag;
.......
OTHER PROPERTIES
.......
Je suis en train de les insérer dans le Fichier (et par la suite Tag) en procédant comme suit:
File file = new File();
Tag tag = new Tag();
tag.setTag("tag1");
Tag2 tag2 = new Tag();
tag2.setTag("tag2");
List<Tag> tags = new ArrayList<Tag>();
tags.add(tag);
tags.add(tag2);
file.setTags(tags);
---Add other file attributes here---
Je suis ensuite d'insérer le fichier dans mon DAO à l'aide de:
sessionFactory.getCurrentSession().saveOrUpdate(file);
Dans mes logs, je vois un insert dans mon "fichier" table et 2 insère dans ma table tag, toutefois, la clé étrangère dans ma balise table des points à ma table de fichiers (file_id) est NULLE.
Que pourrais-je bien fait de mal?
OriginalL'auteur El Guapo | 2010-12-21
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas réglé le Fichier pour une Balise, juste la Balise dans un Fichier. Rappelez-vous que dans la programmation orientée objet, par opposition au Modèle Relationnel, vous devez définir les deux extrémités d'une relation. Vous ne pouvez pas naviguer à partir de la Balise de Fichier juste parce que vous avez ajouté un ensemble de Balises dans un Fichier. Dans votre cas, vous pouvez simplement naviguer à partir d'un Fichier de Balise (ex: liste de toutes les Balises d'un Fichier). Vous ne pouvez pas dire qui Fichier une Balise appartient, en ne regardant que la Balise.
Ce qui est généralement fait est une méthode d'assistance à l'un des modèles, comme ceci:
Voir cette pour un exemple (de mise en veille prolongée de la suite de tests):
Le lien n'existe plus 🙁 vous pouvez fournir une autre source?
J'ai changé la réponse au point de la version la plus récente.
OriginalL'auteur jpkrohling
De clé étrangère dans la base de données reflète l'état de
Tag.file
(depuisTag
est le propriétaire du côté de la relation comme un côté "plusieurs" dans un bidirectionnel plusieurs-à-une relation).Je ne vois pas où vous la définissez.
OriginalL'auteur axtavt