save hibernate - Java - Programmation
Marsh Posté le 09-10-2007 à 11:57:31
en debugant j'ai vu ceci
failed to lazily initialize a collection of role: fr.cerner.modele.Malade.adresses, no session or session was closed pour la ligne Adresse adresEnf = new Adresse();
Marsh Posté le 12-10-2007 à 12:55:27
j'ai resolu le probleme rien à voir avec "failed to lazily initialize a collection of role"
C'était au niveau de la base, une erreur de données, un trigger se déclenche après le commit de hibernate et celui ci était faux si une table n'était par rempli.
Je voyais bien mon insert dans la console mais aucune erreur
voila
Marsh Posté le 09-10-2007 à 11:19:23
bonjour je n'arrive pas à enregistrer mon object, j'ai pas d'erreur, je maitrise pas le mapping hibernate je pense que ça vient de là, adresMer n'est pas vide, les autres fonctions d'enregistrement et de session fonctionne pour les autres objets
Voici mon code
Session session = HibernateUtil.currentSession();
HibernateUtil.demarreSession().beginTransaction();
Adresse adresEnf = new Adresse();
adresEnf.setMalade(enfmal);
adresEnf.setAd_pycode(adresMer.getAd_pycode());
adresEnf.setAd_nom(adresMer.getAd_nom());
adresEnf.setAd_prenom(adresMer.getAd_prenom());
adresEnf.setAd_cpt(adresMer.getAd_cpt());
adresEnf.setAd_typ(adresMer.getAd_typ());
adresEnf.setAd_lib1(adresMer.getAd_lib1());
adresEnf.setAd_lib2(adresMer.getAd_lib2());
adresEnf.setAd_lib3(adresMer.getAd_lib3());
adresEnf.setAd_titcode(adresMer.getAd_titcode());
adresEnf.setVille(adresMer.getVille());
adresEnf.setAd_pacode(adresMer.getAd_pacode());
adresEnf.setAd_tel1(adresMer.getAd_tel1());
adresEnf.setAd_tel2(adresMer.getAd_tel1());
adresEnf.setAd_tel3(adresMer.getAd_tel1());
adresEnf.setAd_hdeb(adresMer.getAd_hdeb());
adresEnf.setAd_dfin(adresMer.getAd_dfin());
adresEnf.setAd_cptprec(adresMer.getAd_cptprec());
adresEnf.setAd_cacode(adresMer.getAd_cacode());
adresEnf.setAd_datmaj(adresMer.getAd_datmaj());
adresEnf.setAd_utilmaj(adresMer.getAd_utilmaj());
try {
Session session = HibernateUtil.getUpdateSession();
session.saveOrUpdate(adresEnf);
}
catch (Exception e) {
TransactionUtil.rollback();
Log.getLog(this).error("AdresseSql" );
throw e;
}
finally {
Session session = HibernateUtil.currentSession();
// si la session existe et est bien ouverte
if(session != null && session.isOpen())
{
try
{
// si la transaction est encore valide, on la commit
if(session.getTransaction() != null && session.getTransaction().isActive())
session.getTransaction().commit();
}
finally
{
// on ferme la session
HibernateUtil.closeSession();
}
}
}
et voici mon mapping
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="fr.cerner.modele">
<class name="Adresse" table="ADRESSE">
<composite-id>
<key-many-to-one name="malade" column="AD_MANUMDOS"/>
<key-property name="ad_cpt" column="AD_CPT"/>
</composite-id>
<property name="ad_typ" column="AD_TYP" type="fr.cerner.sql.type.Char"/>
<property name="ad_lib1" column="AD_LIB1"/>
<property name="ad_lib2" column="AD_LIB2"/>
<property name="ad_lib3" column="AD_LIB3"/>
<many-to-one name="ad_titcode" column="AD_TITCODE"/>
<many-to-one name="ville" class="fr.cerner.modele.Ville" lazy="false">
<column name="AD_VNCODE"/>
<column name="AD_VNCODEDIST"/>
</many-to-one>
<property name="ad_pacode" column="AD_PACODE" type="fr.cerner.sql.type.Char"/>
<property name="ad_pytype" column="AD_PYTYPE" type="fr.cerner.sql.type.Char"/>
<property name="ad_pycode" column="AD_PYCODE" type="fr.cerner.sql.type.Char"/>
<property name="ad_tel1" column="AD_TEL1" type="fr.cerner.sql.type.Char"/>
<property name="ad_tel2" column="AD_TEL2" type="fr.cerner.sql.type.Char"/>
<property name="ad_tel3" column="AD_TEL3" type="fr.cerner.sql.type.Char"/>
<property name="ad_hdeb" column="AD_HDEB" type="fr.cerner.sql.type.DateAxya"/>
<property name="ad_dfin" column="AD_DFIN" type="fr.cerner.sql.type.DateAxya"/>
<property name="ad_cptprec" column="AD_CPTPREC"/>
<many-to-one name="ad_cacode" column="AD_CACODE"/>
<property name="ad_datmaj" column="AD_DATMAJ"/>
<many-to-one name="ad_utilmaj" column="AD_UTILMAJ"/>
<property name="ad_nom" column="AD_NOM"/>
<property name="ad_prenom" column="AD_PRENOM"/>
</class>
</hibernate-mapping>
Merci