Bonjour à tous,
Je m'adresse à vous car je deviens fou. J'ai beau cherché dans tous les sens, toutes les soutions proposées ne fonctionnent pas.
Pour simplifier, j'ai deux tables, les "axes" et les "questions" (c'est dans le cadre d'un questionnaire, les questions sont classées dans des axes pédagogiques) hebergées par un MySQL 5 (et j'utilise la dernière version disponible d'Hibernate).
Code:
Table question :
id q_intitule q_id_axe
1 Comment faire fonctionner Hibernate ? 1
Code:
Table axe :
id axe_nom
1 Java
2 C++
Donc comme vous le constatez l'axe d'id 1 (Java) est associé à la question 1, tandis que l'axe 2 (C++), lui, n'a aucune association.
Le problème, c'est qu'en utilisant des méthodes d'Hibernate pour supprimer l'axe Java, j'obtiens toute sorte d'exceptions traitant de violations de contraintes d'intégrité etc... ("Could not execute JDBC batch update"). L'axe C++ ne pose jamais de problèmes.
Voici mon Bean Hibernate gérant l'axe et la question :
Code:
package datas ;
/**
*
*
* @hibernate.class
* table="AXES"
*
*/
public class Axes {
// <editor-fold defaultstate="collapsed" desc=" Property: String axe_nom ">
private String axe_nom;
/**
* @hibernate.property
*/
public String getAxe_nom () {
return axe_nom;
}
public void setAxe_nom (String axe_nom) {
this.axe_nom = axe_nom;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" PrimaryKey: String id ">
private String id;
/**
* @hibernate.id
* generator-class="uuid.hex"
*/
public String getId () {
return id;
}
public void setId (String id) {
this.id = id;
}
//</editor-fold>
// <editor-fold defaultstate="collapsed" desc=" 1-N Relation to Collection /*datas.Questions*/ questionss ">
private java.util.Collection questionss;
/**
* @hibernate.set
* role="questionss"
* @hibernate.collection-key
* column="AXES_FK"
* @hibernate.collection-one-to-many
* class="datas.Questions"
*/
public java.util.Collection getQuestionss() {
return this.questionss;
}
public void setQuestionss(java.util.Collection questionss) {
this.questionss = questionss;
}
// </editor-fold>
}
Code:
package datas ;
/**
*
*
* @hibernate.class
* table="QUESTIONS"
*
*/
public class Questions {
// <editor-fold defaultstate="collapsed" desc=" Property: String q_intitule ">
private String q_intitule;
/**
* @hibernate.property
*/
public String getQ_intitule () {
return q_intitule;
}
public void setQ_intitule (String q_intitule) {
this.q_intitule = q_intitule;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc=" PrimaryKey: String id ">
private String id;
/**
* @hibernate.id
* generator-class="uuid.hex"
*/
public String getId () {
return id;
}
public void setId (String id) {
this.id = id;
}
//</editor-fold>
// <editor-fold defaultstate="collapsed" desc=" N-1 Relation to datas.Axes axes ">
private datas.Axes axes;
/**
* @hibernate.many-to-one
* column="AXES_FK"
* class="datas.Axes"
* not-null="true"
* outer-join="auto"
*/
public datas.Axes getAxes() {
return this.axes;
}
public void setAxes(datas.Axes axes) {
this.axes = axes;
}
// </editor-fold>
J'ai bien essayé de rajouter la directive
cascade="all-delete-orphan" dans le tag
@hibernate.many-to-one de la classe Question, comme conseillé dans les sources. Cependant, j'obtiens toujours une exception ! Pareil dans le tag
@hibernate.set de la classe Question, j'ai essayé
cascade="all", en conjonction avec l'autre directive ou pas. Même résultat...
Pour information, voici la fonction appelée lors de la suppression d'un axe :
Code:
public void deleteAxes(Axes axes){
Session session = datas.HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
session.delete(axes);
tx.commit();
datas.HibernateUtil.closeSession();
}
Bon... je pense ne pas être vraiment très au point concernant Hibernate, c'est sûr, mais pour le moment je dois résoudre ce problème au plus vite, je m'y metterai plus en profondeur un peu plus tard... Donc si vous aviez une idée, ca serait vraiment super ! :)
Merci d'avance !
Nik