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 :
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 <?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 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
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);
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()); }
Partager