Bon à tous!
voici mon probleme:
j'ai 3 classes : A
La classe B
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 package test; import java.io.Serializable; public class A implements Serializable { /** * */ private static final long serialVersionUID = 1L; private int _jour = 1; private String _nom = null; private B _b = null; public B getB() { return _b; } public void setB(B b) { _b = b; } public int getJour() { return _jour; } public void setJour(int jour) { _jour = jour; } public String getNom() { return _nom; } public void setNom(String nom) { _nom = nom; } }
la classe C
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 package test; import java.io.Serializable; public class B implements Serializable { /** * */ private static final long serialVersionUID = 1L; private long _id = 0; private int _val1 = 0; private double _val2 = 0; public int getVal1() { return _val1; } public void setVal1(int val1) { _val1 = val1; } public double getVal2() { return _val2; } public void setVal2(double val2) { _val2 = val2; } public long getId() { return _id; } public void setId(long id) { _id = id; } public boolean equals(Object object) { if (object instanceof B) { B b = (B) object; if (_id == b.getId() && _val1 == b.getVal1() && _val2 == b.getVal2()) return true; return false; } else return super.equals(object); } public int hashCode() { int h = 0; h = (int) ((127 * h) + _id); h = (127 * h) + _val1; h = (int) ((127 * h) + _val2); return h; } }
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 package test; public class C { private String _alpha1 = null; private String _alpha2 = null; private B _b = null; public B getB() { return _b; } public void setB(B b) { _b = b; } public String getAlpha1() { return _alpha1; } public void setAlpha1(String alpha1) { _alpha1 = alpha1; } public String getAlpha2() { return _alpha2; } public void setAlpha2(String alpha2) { _alpha2 = alpha2; } }
Mon programme de test:
Mon fichier hbm.xml
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 import org.hibernate.Session; import org.hibernate.Transaction; import test.A; import test.B; import test.C; public class Main { /** * @param args */ public static void main(String[] args) { Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); A a1 = getA("a1", 15, 10, 12.3); A a2 = getA("a2", 16, 10, 10.1); C c1 = getC("c1", "c2", 10, 10.1); session.saveOrUpdate(a1); session.saveOrUpdate(a2); session.saveOrUpdate(c1); //*/ /* A a = (A) session.load(A.class, new String("a2")); session.delete(a); //*/ tx.commit(); HibernateUtil.closeSession(); } private static C getC(String alpha1, String alpha2, int val1, double val2) { C a = new C(); a.setAlpha1(alpha1); a.setAlpha2(alpha2); B b = new B(); b.setVal1(val1); b.setVal2(val2); a.setB(b); return a; } private static A getA(String n, int jour, int val1, double val2) { A a = new A(); a.setJour(jour); a.setNom(n); B b = new B(); b.setVal1(val1); b.setVal2(val2); a.setB(b); return a; } }
et j'utilise hibernate pour les stocké en base.
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 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="test"> <class name="A" table="A"> <id name="nom" type="string"> <column name="NOM" sql-type="char(6)" not-null="true"/> <generator class="assigned"/> </id> <property name="jour" column="JOUR" type="integer"/> <many-to-one name="b" column="B_ID" unique="true" not-null="true" lazy="false" fetch="join" cascade="save-update,delete"/> </class> <class name="B" table="B"> <id name="id" column="B_ID"> <generator class="increment"/> </id> <property name="val1" column="VAL1" type="integer"/> <property name="val2" column="VAL2" type="double"/> </class> <class name="C" table="C"> <id name="alpha1" type="string"> <column name="ALPHA1" sql-type="char(6)" not-null="true"/> <generator class="assigned"/> </id> <property name="alpha2" column="ALPHA2" type="string"/> <many-to-one name="b" column="B_ID" unique="true" not-null="true" lazy="false" fetch="join" cascade="save-update,delete"/> </class> </hibernate-mapping>
Or j'ai un pb avec le mapping, j'aimerais autant que possible que quand je modifie A:
qu'hibernate ne me régère pas un nouvelle element B, alors qu'il modifie seulement l'élément A.
Je developpe un peu pour bien me faire comprendre:
imaginons je lance 2 fois d'affiler mon programme et que je regarde en base
j'ai bien 2 ligne dans la table A
1 ligne dans la table C
et 6!!! lignes dans la table B.
quelqu'un peu m'expliquer pourquois? et/ ou comment remedier a ce probleme, j'aimerais qu'hibernate ne modifie les éléments B rataché à A ou C, pas qu'il en crée de nouveau.
d'avance merci
Partager