Hibernate version:
3.2 cr4
Mapping documents:
<?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="wpi.metier">
<class name="Contrat" node="r">
<composite-id class="ContratPK" mapped="true">
<key-property name="id" type="string" node="id"/>
<key-property name="code" type="string" node="code"/>
<key-property name="validite" type="string" node="validite"/>
</composite-id>
<property name="client" type="string" node="client"/>
<property name="contrat" type="string" node="contrat"/>
<property name="contact" type="string" node="contact"/>
<property name="famFile" type="string" node="famFile"/>
<property name="famUrl" type="string" node="famUrl"/>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
/**
* @return
*/
public int update() {
int n=0;
/* Initialisation d'Hibernate pour le mapping DOM vers JAVA */
Session session = HibernateUtil.getSessionFactory().openSession();
Session dom4jSession = session.getSession(EntityMode.DOM4J);
Session pojoSession = session.getSession(EntityMode.POJO);
Transaction transaction = session.beginTransaction();
/* Persistance de l'objet dans la session POJO */
pojoSession.merge("wpi.metier.Contrat",contrat );
pojoSession.flush();
try {
/* Lecture du document avec DOM4J */
String xmlfile= this.getRequest().getSession(false).getServletContext().getRealPath("/") + "ressources" + java.io.File.separator + "xml" + java.io.File.separator + "wpi-contrats.xml";
SAXReader saxReader = new SAXReader();
Document xmldb = saxReader.read(xmlfile);
Node toRemove = (Node) xmldb.selectSingleNode("//r[id=\"" + this.contrat.getId() + "\" and validite=\"" + this.contrat.getValidite() + "\"]");
if (toRemove != null) {
/* Récuperation de l'objet persisté dans un element DOM */
Query requete = dom4jSession.createQuery( "from Contrat as contrat where contrat.id.id = ? and contrat.id.code = ? and contrat.id.validite = ?");
requete.setString(0, contrat.getId());
requete.setString(1, contrat.getCode());
requete.setString(2, contrat.getValidite());
Element element = (Element) requete.uniqueResult();
System.out.println(element.asXML());
if (element != null) {
/* Suppression et creation respectivement de l'ancien et du nouvel element */
boolean isRemove = toRemove.getParent().remove(toRemove);
if (isRemove) {
/* Ajout du neud */
xmldb.getRootElement().add(element);
/* Ecriture physique du fichier */
XMLWriter writer = new XMLWriter(new FileWriter(xmlfile));
writer.write( xmldb );
writer.close();
}
transaction.commit();
session.close();
/* Compteur de mise à jour */
if (isRemove) {
n++;
}
} else {
/* Rollback */
transaction.rollback();
session.close();
}
}
} catch (Exception e) {
e.printStackTrace ();
/* Rollback */
transaction.rollback();
session.close();
}
return n;
}
Full stack trace of any exception that occurs:
Pas d'exception
Name and version of the database you are using:
HSQLDB
The generated SQL (show_sql=true):
select
contrat0_.id as id1_,
contrat0_.code as code1_,
contrat0_.validite as validite1_,
contrat0_.client as client1_,
contrat0_.contrat as contrat1_,
contrat0_.contact as contact1_,
contrat0_.famFile as famFile1_,
contrat0_.famUrl as famUrl1_
from
Contrat contrat0_
where
contrat0_.id=?
and contrat0_.code=?
and contrat0_.validite=?
Le probleme:
L'element que j'obtiens pour ma requete est incorrecte ;-(
from Contrat as contrat where contrat.id.id = ? and contrat.id.code = ? and contrat.id.validite = ?
<r><id><id>RETENO</id><code>CL0001</code><validite>2002-02-23</validite></id><client>TRANSICIEL</client><contrat>RIB00/09/BRAH</contrat><contact>Yves DELNATTE</contact><famFile>RETENO-CL0001.dot</famFile><famUrl></famUrl></r>
La sequence suivante ne correspond pas à mon mapping, si ?
<id> <id>XXX</id> <code>XXXX</code> <validite>0001-01-01</validite> </id>
Que puis-je ou dois-je faire pour otenir un element correcte ?
|