impossible de supprimer un objet avec hibernate3+struts - Java - Programmation
Marsh Posté le 06-01-2012 à 10:08:56
t'es sûr de récupérer ton gestionutilisateur avec (GestionUtilisateur) session.get(GestionUtilisateur.class,Long.valueOf(idgestionutilisateur)); ?
j'ai comme un doute.
essaie d'ajouter du log et regarde si tu as vraiment ton objet
Marsh Posté le 06-01-2012 à 10:54:11
bj brissou
merci pour la réponse, gestionutilisateur est l'instance de GestionUtilisateur lie a la table gestionutilisateur de la base, le problème c'est que ce paramètre gestionutilisateur passer a session.delete() est null (suite a un log)!!!!, sais pas pourquoi, même le paramètre idgestionutilisateur de la methode supprimer(int idgestionutilisateur), suite a un test, ne se récupère pas ce qui est demandé par administration.jsp, il est toujours a zero, !!
donc si un objet ayant id=0 existe dans la base alors il va être supprime méme n'est pas demandé, c'est a dire si je clique sur supprimer lie a un objet ayant id=2 celui ayant id=0 se supprime !!! (voir administration.jsp), si non , l'erreur ci dessus apparait !!!!!!!!
Marsh Posté le 06-01-2012 à 09:14:05
bonjour a tous;
voila, je developpe une application j2ee sous eclipse galileo(Struts1.2+hibernate3+BD Mysql), vraiment je me trouve incapable de trouver la solution ca fait presque une semaine de recherche, malgré que j'ai realiser une application pareil dans le temps et ca fonctionne,!!!!
le problème, tout simplement, c'est que je veux supprimer un user de la table gestionutilisateur deja listé dans un .jsp (cete operation de list fonctionne), en utilisant criteria.les codes sont ci dessous:
*****************************
code: administration.jsp
</tr>
<logic:iterate id="gestionutilisateur" name="GestionUtilisateurListForm" property="listUtilisateur"type="com.MaintenanceCERTE.dao.GestionUtilisateu">
<tr>
<td><bean:write name="gestionutilisateur" property="idgestionutilisateur" /></td>
<td><bean:write name="gestionutilisateur" property="nomprenom" /></td>
<td><bean:write name="gestionutilisateur" property="grade" /></td>
<td><bean:write name="gestionutilisateur" property="laboratoire" /></td>
<td><bean:write name="gestionutilisateur" property="telephone" /></td>
<td><bean:write name="gestionutilisateur" property="email" /></td>
<td><ahref="GestionUtilisateurSupprimer.do?operation=delete&id=<%=gestionutilisateur.getIdgestionutilisateur() %>">Supprimer</a></td>
</tr>
</logic:iterate>
***************************
code beans GestionUtilisateur.java
public class GestionUtilisateur {
private Long idgestionutilisateur; // dans les classes action et //form j'ai utiliser un int
private String nomprenom;
private String grade;
private String laboratoire;
private String telephone;
private String email;
public GestionUtilisateur(Long idgestionutilisateur, String nomprenom,String grade,String laboratoire,String telephone,String email)
{
this.setIdgestionutilisateur(idgestionutilisateur);
this.nomprenom=nomprenom;
this.grade=grade;
this.laboratoire=laboratoire;
this.telephone=telephone;
this.email=email;
................. les getters et les setters .....................}
***************************
code GestionUtilisateurAction:
……
public ActionForward execute………….{
GestionUtilisateurSupprimerForm gestion= (GestionUtilisateurSupprimerForm) form;
int id= gestion.getIdgestionutilisateur();
String operation= request.getParameter("operation" );
if("delete".equals(operation))
{ SimulateDataBase simulateDB = new SimulateDataBase();
simulateDB.supprimer(id);
}
return mapping.findForward("supprimerUser" );
}}
*******************************
code GestionUtilisateur.hbm.xml:
<hibernate-mapping>
<class name="A.B.C.GestionUtilisateur" table="gestionutilisateur">
<id name="idgestionutilisateur" type="java.lang.Long" column="idgestionutilisateur"> <generator class="assigned" /></id>
<property name="nomprenom" type="java.lang.String" column="nomprenom" />
<property name="grade" type="java.lang.String" column="grade"/>
<property name="laboratoire" type="java.lang.String" column="laboratoire" />
<property name="telephone" type="java.lang.String" column="telephone"/>
<property name="email" type="java.lang.String" column="email" />
</class>
</hibernate-mapping>
-----------------------------------------------
code Dao, fonction supprimer de classe SimulateDataBase:
public void supprimer(int idgestionutilisateur)
{
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session= sessionFactory.openSession();
Transaction transaction=null;
transaction=(Transaction) session.beginTransaction();
try
{
Criteria crit=session.createCriteria(GestionUtilisateur.class);
GestionUtilisateur gestionutilisateur= (GestionUtilisateur) session.get(GestionUtilisateur.class,Long.valueOf(idgestionutilisateur));
session.delete(gestionutilisateur);
transaction.commit();
}
catch (HibernateException e){
transaction.rollback();
e.printStackTrace();
} finally{
session.close();
}}
**********************
ERREUUUUUUUUUUUUUUUUUUR qui me bloque, c'est que la suppression se fait seulement pour un objet ayant un id=0 alors que les autres ne suppriment pas ??????
java.lang.IllegalArgumentException: attempt to create delete event with null entity
at org.hibernate.event.DeleteEvent.<init>(DeleteEvent.java:24)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:739)
atA.B.C.SimulateDataBase.supprimer(SimulateDataBase.java:194)
atA.B.action.GestionUtilisateurSupprimerAction.execute(GestionUtilisateurSupprimerAction.java:31)
************************
SVP les amis vos aides, merci d'avance
cordialement