2010-12-07 37 views
3

J'ai une entité JPA qui a des collections enfants via des relations OneToMany et j'ai défini cascade = CascadeType.ALL, mais quand je sauvegarde l'entité parente, elle n'enregistre aucune les modifications apportées à la collection enfant (c'est-à-dire ajoute ou supprime), je ne sais pas pourquoi c'est le cas.JPA, Comment puis-je savoir ce qui sera sauvegardé dans la base de données

Il serait utile de savoir s'il y avait un moyen d'obtenir des informations de JPA EntityManager etc. sur ce qui sera sauvegardé à la fin de la transaction.

Vous ne savez pas comment faire cela? Déboguer est devenu impossible.

+0

Avez-vous défini le site propriétaire avec "mappedBy"? – niels

+0

Généralement, il s'agit d'un mappage incorrect ou vous n'avez pas ajouté correctement l'enfant à la liste des enfants du parent. – Damo

+0

pour vérifier quel est l'état de votre entité avant de persister, vous pourriez vouloir jeter un coup d'oeil EntityListeners http://docs.oracle.com/html/E24396_01/ejb3_overview_pc_callbacks.html – Korgen

Répondre

5

Une solution pour voir ce qui se passe au niveau SQL est d'activer le débogage sur Hibernate. Si vous ajoutez un fichier log4j.properties dans votre répertoire/conf, vous pouvez contrôler manuellement la sortie du journal d'hibernation. Voici un exemple de fichier de configuration que vous pouvez utiliser. Décommentez les zones appropriées pour afficher les niveaux de journal:

log4j.logger.org.hibernate=info 
### log just the SQL 
log4j.logger.org.hibernate.SQL=debug 

### log JDBC bind parameters ### 
log4j.logger.org.hibernate.type=debug 

### log schema export/update ### 
log4j.logger.org.hibernate.tool.hbm2ddl=info 

### log HQL parse trees 
#log4j.logger.org.hibernate.hql=debug