Un-à-Plusieurs Unidirectionnel Parent-Enfant ID Cascade Enregistrer
Lorsque vous essayez d'enregistrer un ID de ma classe parent d'un enfant de la classe, je reçois l'erreur
"ERREUR de Champ 'parent_id' n'ont pas de valeur par défaut"
J'ai essayé tous les types de mappings. Je suis à l'aide d'annotations.
Toute aide serait appréciée
Parent:
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column(name="description")
private String description;
@OneToMany
@Cascade(value= {org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE})
@JoinColumn(name="parent_id")
private List<Child> children;
Enfant:
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Column(name="description")
private String description;
Grâce.
Qu'entendez-vous par "Lorsque vous essayez d'enregistrer un ID de ma classe parent d'un enfant de la classe". Pouvez-vous développer?
OriginalL'auteur ButtersB | 2009-11-06
Vous devez vous connecter pour publier un commentaire.
Vous devez avoir quelque chose de mal, quelque part d'autre, car ces correspondances fonctionnera de la façon dont ils sont. Ils pourraient être mieux, mais qu'ils vont travailler. Plus précisément, tous les
@Column
annotations sont redondants et inutiles, et que non sequitor noté, vous devez utiliser la cascade de la propriété de la JPA du@OneToMany
au lieu de Hibernate@Cascade
. J'ai créé un praticable exemple avec la propre version de ce que vous avez posté. Si vous avez git et maven, vous pouvez l'exécuter avec:Il crée un parent avec deux enfants, les enregistre, et puis les charge et affiche le graphique. La sortie est:
OriginalL'auteur Ryan Stewart
Un ajout tardif au cas où quelqu'un jamais s'exécute dans le même problème.
De cette entité-là, quand persisté de l'utilisation d'Hibernate 4.1.8, sera cascade de la
FieldChange
entités, mais pas remplir la colonne de jointure:Ni ne l'instruction insert définir la
event_id
colonne, ni mise à jour, l'insertion de l'entité après les faits - lesevent_id
reste nulle et la relation est perdue.Si, toutefois, la
@JoinColumn
définition est modifié comme ceci:puis l'instruction insert comprend la
event_id
colonne comme il se doit, et tout est bien.Ce ne peut être qu'une régression dans cette version particulière de mise en veille prolongée, mais peut-être que ça aide quelqu'un.
@JoinColumn(name = "event_id")
à@JoinColumn(name = "event_id", nullable = false)
résolu le problème.OriginalL'auteur Henning
Dans votre cas, JPA fournisseur pour conserver objet enfant avec son parent effectuer au moins trois requêtes sur db. Les deux premières persistent les objets en sa propre. Le dernier
mise à jour de l'objet enfant avec la clé étrangère référençant parent. Le deuxième échec de la requête parce que vous avez une contrainte not NULL sur la colonne de clé étrangère. Vous avez trois options:
OriginalL'auteur slavik
Changer votre
@OneToMany
à@OneToMany(cascade=CascadeType.ALL)
utiliser JPA plutôt que de mise en veille prolongée sont des extensions deAbsolument correcte ChssPly76 je suppose que son utilisation des extensions ici n'étaient pas fondées voyant que la
parent_id
n'est pas être reproduit correctement. Ses annotations tous l'air correct à côté de changements que j'ai suggéré. Que pensez-vous qui se passe étant donné le manque d'informations à partir de l'OP?Il est impossible de dire sans plus d'informations.
OriginalL'auteur non sequitor
Ma conjecture est que le
@JoinColumn annotation
besoin d'unreferencedColumnName
attribué.OriginalL'auteur Josh