[Hibernate] Detached entity passed to persist
Bonjour,
Aprés avoir consulter vos remarques sur ce type de problémes et appliqué vos consignes je n'ai pas encore réussi a résoudre le probléme alors j'ai postulé cette erreur sur le forum.
Je travaille sur un projet hibernate. J'arrive pas a ajouter plusieurs tuples dans ma table contact il m'ajoute seulement le premier enregistrement après il m'affiche cette erreur :detached entity passed to persist : Domain.Contact
J'ai créé ma classe Contact avec les getter et les setter.
J'ai créé un formulaire jsp qui renvoi les donné à une servlet cette dernier recupaire les données saisie et appelle la méthode Ajout de la classe DAOcontact pour l'ajout.
voici le fichier de mapping de ma classe contact :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 30 nov. 2010 20:53:56 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="domain.Contact" table="CONTACT" discriminator-value="CONTACT">
<id name="id" type="int">
<column name="ID_Contact" />
<generator class="increment" />
</id>
<discriminator column="ENTREPRISE" type="string" />
<property name="firstname" type="java.lang.String">
<column name="FIRSTNAME" />
</property>
<property name="lastname" type="java.lang.String">
<column name="LASTNAME" />
</property>
<property name="email" type="java.lang.String">
<column name="EMAIL" />
</property>
<many-to-one name="adr" class="domain.Adresse" fetch="join" cascade="persist">
<column name="ADR" />
</many-to-one>
<set name="phones" inverse="true" table="PHONENUMBER" cascade="persist">
<key>
<column name="ID_Contact" />
</key>
<one-to-many class="domain.PhoneNumber" />
</set>
<set name="books" inverse="true" table="CONTACT" cascade="persist">
<key>
<column name="ID_Contact" />
</key>
<one-to-many class="domain.ContactGroup" />
</set>
<subclass name="domain.Entreprise" discriminator-value="ENTREPRISE" >
<property name="numsiret" type="integer"/>
</subclass>
<!-- <joined-subclass name="domain.Entreprise" table="ENTREPRISE">-->
<!-- <key column="ID_Contact"/>-->
<!-- <property name="numsiret" column="Entreprise"/>-->
<!-- </joined-subclass>-->
</class>
</hibernate-mapping> |
voici ma servlet NewCOntact :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//String id1 = request.getParameter("id");
String nom1 = request.getParameter("nom");
String prenom1 = request.getParameter("prenom");
String email1 = request.getParameter("email");
String adr1=request.getParameter("adr");
String codp=request.getParameter("codepostal");
String ville=request.getParameter("ville");
String pays=request.getParameter("pays");
// creation de ladresse
System.out.println("adr " + adr1 + " codp " + codp + " ville " + ville + " pays " + pays);
Adresse adr=new Adresse();
adr.setCity(ville);
adr.setCountry(pays);
adr.setZip(codp);
adr.setStreet(adr1);
/*String a=request.getParameter("t");
String b=request.getParameter("to");
String c=request.getParameter("top");*/
String[] rsa = request.getParameterValues("t");
String scg="";
for(int i =0; i< rsa.length;i++){
if (!rsa[i].isEmpty())
scg = rsa[i];
}
//System.out.println(a + " a " + b + " b+" + c + " c");
System.out.println("cggggg"+scg);
/*if(a != null)
rsa=a;
if(b !=null)
rsa=b;
if( c != null)
rsa=c;*/
ContactGroup cg = new ContactGroup();
cg.setGroupName(scg);
String bur=request.getParameter("bur");
String dom=request.getParameter("dom");
String prive=request.getParameter("priv");
System.out.println(bur + " " + dom + " " + prive);
PhoneNumber p1 = new PhoneNumber();
PhoneNumber p2 = new PhoneNumber();
PhoneNumber p3 = new PhoneNumber();
Entreprise entr= new Entreprise();
Contact person = new Contact();
//System.out.println(person.getBooks().size());
if (!bur.isEmpty()){
p1.setPhoneKind("bureau");
p1.setPhoneNumber(bur);
p1.setContacts(person);
person.getPhones().add(p1);
}
if (!dom.isEmpty()){
p2.setPhoneKind("domicile");
p2.setPhoneNumber(dom);
p2.setContacts(person);
person.getPhones().add(p2);
}
if (!prive.isEmpty()){
p3.setPhoneKind("prive");
p3.setPhoneNumber(prive);
p3.setContacts(person);
person.getPhones().add(p3);
}
person.getBooks().add(cg);
person.setAdr(adr);
person.setNumsiret(11);
person.setFirstname(prenom1);
person.setEmail(email1);
person.setLastname(nom1);
//ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
DAOContact dao = (DAOContact)context.getBean("DAOContact");
//DAOContact dao= new DAOContact();
dao.addContact(person); |
voici la méthode ajoutContact dans la classe DAOCOntact qui prend en parametre un contact :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
public void addContact(Contact con)
Session session = null;
try
{
SessionFactory sessionf =Util.getInstance();
session = sessionf.openSession();
//begin a transaction
org.hibernate.Transaction tx = session.beginTransaction();
Contact contact = con;
session.persist(contact);
//session.save(contact);
tx.commit();
}catch(Exception e){
System.out.println(e.getMessage());
} |