J'ai deux tables: Tastock et Tastockprice. TASTOCKID TASTOCKID DANS LE TAXTOCKPRICE est la clé étrangère pour table Tastock.
@Test @Transactional(propagation = Propagation.REQUIRES_NEW) public void createTaStock() throws Exception { TaStock taStock = new TaStock(); ... TaStockPrice taStockPrice = new TaStockPrice(); ... taStock.addTaStockPrice(taStockPrice); taStockService.persist(taStock); }
4 Réponses :
Vous définissez la collection comme n'étant pas inséréable ni mise à jour. De cette façon, l'hibernate ne le persistera jamais. P>
Vous pouvez définir comment Hibernate devrait traiter cette relation à l'aide du paramètre CASCADE dans votre annotation. Pour plus d'informations, voici un article de blog complet sur le sujet: http://www.mkyong.com/hibernate/ibernate-cascade-example-save-update-delete-and-Delete-orphan/ . P>
Bonjour, j'ai eu l'air d'attirer l'exemple sur www.mkyong.com. Pour être synchrone avec l'exemple, il suffit d'ajouter la déclaration Tastockprice.SetTastock (Tastock); . La collection est insérable / mise à jour car j'ai annoté la collection avec: cascade = cascadetype.all. J'ai toujours le même message d'exception.
Avec ma configuration actuelle, Hibernate ne semble pas définir de champ astockid. Comment puis-je vous assurer que l'hibernate a reconnu Tastockid comme clé étrangère et définit ce champ lors de la sauvegarde de Tastock?
TASTOCKPRICE DE TATEAU DB, le champ suivant est défini "TastockID Integer non null", et la contrainte suivante: Contrainte Tastockprice_tastockid_fkey Touche étranger (Tastockid) Références Tastock (ID) Match simple sur la mise à jour Cascade sur la cascade de Supprimer
Je devais définir insérable = false, mise à jour = false code> sur la définition de la colonne enfant pour que l'insertion en cascade fonctionne.
i supprimé integer privé tsockid " code> de
tastockprice code> et modifié
@JOINCOLUMN (NAME = "TASTOCKID", NULLLABLE = FALSE, UPDABLE = FALSE, INSERTABLE = TRUE) CODE> Pour le résoudre. P>
Merci beaucoup, cela m'a également résolu pour moi. Avez-vous une explication sur la manière dont le réglage inséré dans TRUE résout le problème? Merci!
Utilisez ci-dessous Annotation sur qui devrait résoudre le problème. P> TastockPricelist Code>. p>
@ONETOMANY code>
@cascade (cascadetype.all) code>
@JOINCOLUMN (nom = "tsock") code> p>
Merci. J'ai eu la contallation code> @onetoone code> et eu le même problème. J'ai supprimé nullable = false, mise à jour = false code> et cela a résolu mon problème.
Pour activer la possibilité d'économiser sur un alors vous devez dire à votre @Eonetomany code> par exemple
@manytoone code> relation est autorisé à mettre à jour MyTable comme cette mise à jour de cette mise à jour = true p>
Pourquoi avez-vous besoin de la définition de colonne code> astockid code>? JPA ne fonctionne pas comme ceci, vous pouvez vous référer à la clé étrangère par
tastockprice.gettastock (). Getid () code>.