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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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());
		}