Tout d'abord, bonjour à tous!!!
Il s'agit là de mon premier message sur le forum developpez.net. J'espère que vous pourrez m'aider et pouvoir aider à mon tour.
Je vous expose mon problème.
J'ai créé une base et un mapping hibernate via hibernate tools mais je ne parviens pas a effectuer des ajouts en cascade. Par exemple, j'ai une table theme et une table image. Ces deux tables sont liées par une relation de type many-to-many porteuse d'un attribut.
Précision: j'utilise Spring
Voici le script de création des tables:
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 CREATE TABLE orientation ( idOrientation int not null auto_increment, libelleOrientation varchar(20) not null, PRIMARY KEY(idOrientation) )Type=InnoDB; CREATE TABLE image ( idImage int not null auto_increment, nomImage varchar(50) not null, cheminImage varchar(200) not null, descriptionImage varchar(200), idOrientation int not null, PRIMARY KEY(idImage), CONSTRAINT FK_theme_idOrientation FOREIGN KEY (idOrientation) REFERENCES orientation (idOrientation), UNIQUE(nomImage, cheminImage) )Type=InnoDB; CREATE TABLE theme ( idTheme int not null auto_increment, libelleTheme varchar(50) not null, PRIMARY KEY(idTheme), UNIQUE(libelleTheme) )Type=InnoDB; CREATE TABLE image_theme( idImage int not null, idTheme int not null, isPrincipale boolean not null, PRIMARY KEY(idImage, idTheme), CONSTRAINT FK_image_theme_idImage FOREIGN KEY (idImage) REFERENCES image (idImage), CONSTRAINT FK_image_theme_idTheme FOREIGN KEY (idTheme) REFERENCES theme (idTheme) )Type=InnoDB;
Voici maintenant les fichiers de mapping générés par Hibernate Tools:
Image.hbm.xml
Theme.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 <?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 9 d?c. 2009 13:22:16 by Hibernate Tools 3.2.4.GA --> <hibernate-mapping> <class name="com.dawns.studio.javabeans.Image" table="image" catalog="dawnsstudio"> <id name="idImage" type="java.lang.Integer"> <column name="idImage" /> <generator class="increment" /> </id> <many-to-one name="orientation" class="com.dawns.studio.javabeans.Orientation" fetch="select"> <column name="idOrientation" not-null="true" /> </many-to-one> <property name="nomImage" type="string"> <column name="nomImage" length="50" not-null="true" /> </property> <property name="cheminImage" type="string"> <column name="cheminImage" length="200" not-null="true" /> </property> <property name="descriptionImage" type="string"> <column name="descriptionImage" length="200" /> </property> <set name="imageGaleries" inverse="true" lazy="true" table="image_galerie" fetch="select"> <key> <column name="idImage" not-null="true" /> </key> <one-to-many class="com.dawns.studio.javabeans.ImageGalerie" /> </set> <set name="imageThemes" inverse="true" lazy="true" table="image_theme" fetch="select"> <key> <column name="idImage" not-null="true" /> </key> <one-to-many class="com.dawns.studio.javabeans.ImageTheme" /> </set> </class> </hibernate-mapping>
ImageTheme.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 <?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 9 d?c. 2009 13:22:16 by Hibernate Tools 3.2.4.GA --> <hibernate-mapping> <class name="com.dawns.studio.javabeans.Theme" table="theme" catalog="dawnsstudio"> <id name="idTheme" type="java.lang.Integer"> <column name="idTheme" /> <generator class="increment" /> </id> <property name="libelleTheme" type="string"> <column name="libelleTheme" length="50" not-null="true" unique="true" /> </property> <set name="galeries" inverse="true" lazy="true" table="galerie" fetch="select"> <key> <column name="idTheme" not-null="true" /> </key> <one-to-many class="com.dawns.studio.javabeans.Galerie" /> </set> <set name="imageThemes" inverse="true" lazy="true" table="image_theme" fetch="select"> <key> <column name="idTheme" not-null="true" /> </key> <one-to-many class="com.dawns.studio.javabeans.ImageTheme" /> </set> </class> </hibernate-mapping>
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 <?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 9 d?c. 2009 13:22:16 by Hibernate Tools 3.2.4.GA --> <hibernate-mapping> <class name="com.dawns.studio.javabeans.ImageTheme" table="image_theme" catalog="dawnsstudio"> <composite-id name="id" class="com.dawns.studio.javabeans.ImageThemeId"> <key-many-to-one name="image" class="com.dawns.studio.javabeans.Image"> <column name="idImage" /> </key-many-to-one> <key-many-to-one name="theme" class="com.dawns.studio.javabeans.Theme"> <column name="idTheme" /> </key-many-to-one> </composite-id> <property name="isPrincipale" type="boolean"> <column name="isPrincipale" not-null="true" /> </property> </class> </hibernate-mapping>
Voici maintenant les classes générées:
Image.java
Theme.java
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
96
97
98 package com.dawns.studio.javabeans; // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA import java.util.HashSet; import java.util.Set; /** * Image generated by hbm2java */ public class Image implements java.io.Serializable { private static final long serialVersionUID = 1L; private Integer idImage; private Orientation orientation; private String nomImage; private String cheminImage; private String descriptionImage; private Set<ImageGalerie> imageGaleries = new HashSet<ImageGalerie>(0); private Set<ImageTheme> imageThemes = new HashSet<ImageTheme>(0); public Image() { } public Image(Orientation orientation, String nomImage, String cheminImage) { this.orientation = orientation; this.nomImage = nomImage; this.cheminImage = cheminImage; } public Image(Orientation orientation, String nomImage, String cheminImage, String descriptionImage, Set<ImageGalerie> imageGaleries, Set<ImageTheme> imageThemes) { this.orientation = orientation; this.nomImage = nomImage; this.cheminImage = cheminImage; this.descriptionImage = descriptionImage; this.imageGaleries = imageGaleries; this.imageThemes = imageThemes; } public Integer getIdImage() { return this.idImage; } public void setIdImage(Integer idImage) { this.idImage = idImage; } public Orientation getOrientation() { return this.orientation; } public void setOrientation(Orientation orientation) { this.orientation = orientation; } public String getNomImage() { return this.nomImage; } public void setNomImage(String nomImage) { this.nomImage = nomImage; } public String getCheminImage() { return this.cheminImage; } public void setCheminImage(String cheminImage) { this.cheminImage = cheminImage; } public String getDescriptionImage() { return this.descriptionImage; } public void setDescriptionImage(String descriptionImage) { this.descriptionImage = descriptionImage; } public Set<ImageGalerie> getImageGaleries() { return this.imageGaleries; } public void setImageGaleries(Set<ImageGalerie> imageGaleries) { this.imageGaleries = imageGaleries; } public Set<ImageTheme> getImageThemes() { return this.imageThemes; } public void setImageThemes(Set<ImageTheme> imageThemes) { this.imageThemes = imageThemes; } }
ImageTheme.java
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 package com.dawns.studio.javabeans; // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA import java.util.HashSet; import java.util.Set; /** * Theme generated by hbm2java */ public class Theme implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer idTheme; private String libelleTheme; private Set<Galerie> galeries = new HashSet<Galerie>(0); private Set<ImageTheme> imageThemes = new HashSet<ImageTheme>(0); public Theme() { } public Theme(String libelleTheme) { this.libelleTheme = libelleTheme; } public Theme(String libelleTheme, Set<Galerie> galeries, Set<ImageTheme> imageThemes) { this.libelleTheme = libelleTheme; this.galeries = galeries; this.imageThemes = imageThemes; } public Integer getIdTheme() { return this.idTheme; } public void setIdTheme(Integer idTheme) { this.idTheme = idTheme; } public String getLibelleTheme() { return this.libelleTheme; } public void setLibelleTheme(String libelleTheme) { this.libelleTheme = libelleTheme; } public Set<Galerie> getGaleries() { return this.galeries; } public void setGaleries(Set<Galerie> galeries) { this.galeries = galeries; } public Set<ImageTheme> getImageThemes() { return this.imageThemes; } public void setImageThemes(Set<ImageTheme> imageThemes) { this.imageThemes = imageThemes; } }
ImageThemeId.java
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 package com.dawns.studio.javabeans; // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA /** * ImageTheme generated by hbm2java */ public class ImageTheme implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; private ImageThemeId id; private boolean isPrincipale; public ImageTheme() { } public ImageTheme(ImageThemeId id, boolean isPrincipale) { this.id = id; this.isPrincipale = isPrincipale; } public ImageThemeId getId() { return this.id; } public void setId(ImageThemeId id) { this.id = id; } public boolean isIsPrincipale() { return this.isPrincipale; } public void setIsPrincipale(boolean isPrincipale) { this.isPrincipale = isPrincipale; } }
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 package com.dawns.studio.javabeans; // Generated 9 d�c. 2009 13:22:15 by Hibernate Tools 3.2.4.GA /** * ImageThemeId generated by hbm2java */ public class ImageThemeId implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; private Image image; private Theme theme; public ImageThemeId() { } public ImageThemeId(Image image, Theme theme) { this.image = image; this.theme = theme; } public Image getImage() { return this.image; } public void setImage(Image image) { this.image = image; } public Theme getTheme() { return this.theme; } public void setTheme(Theme theme) { this.theme = theme; } public boolean equals(Object other) { if ((this == other)) return true; if ((other == null)) return false; if (!(other instanceof ImageThemeId)) return false; ImageThemeId castOther = (ImageThemeId) other; return ((this.getImage() == castOther.getImage()) || (this.getImage() != null && castOther.getImage() != null && this.getImage().equals( castOther.getImage()))) && ((this.getTheme() == castOther.getTheme()) || (this .getTheme() != null && castOther.getTheme() != null && this.getTheme() .equals(castOther.getTheme()))); } public int hashCode() { int result = 17; result = 37 * result + (getImage() == null ? 0 : this.getImage().hashCode()); result = 37 * result + (getTheme() == null ? 0 : this.getTheme().hashCode()); return result; } }
Et pour finir, voici ma classe de test:
En laissant le tout tel quel, mon theme est persisté, mais la table de relation et l'image ne sont pas créés. J'ai essayé d'ajouter un cascade="all" sur le set lié à la table de relation au niveau du fichier de mapping de la table theme et dans ce cas, j'obtiens une exception accompagnée associée à un message persist failed.
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 package com.tests; import java.util.HashSet; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import com.dawns.studio.javabeans.Image; import com.dawns.studio.javabeans.ImageTheme; import com.dawns.studio.javabeans.ImageThemeId; import com.dawns.studio.javabeans.Orientation; import com.dawns.studio.javabeans.Theme; import com.dawns.studio.service.ThemeService; public class Test { public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\StudioPhoto\\WEB-INF\\src\\applicationContext.xml"); Theme t = new Theme(); t.setLibelleTheme("Test3"); Image i = new Image(); i.setNomImage("Test3"); i.setCheminImage("Test3"); i.setOrientation(new Orientation("Paysage")); ImageThemeId imgThId = new ImageThemeId(); imgThId.setImage(i); imgThId.setTheme(t); ImageTheme imgTh = new ImageTheme(); imgTh.setIsPrincipale(true); imgTh.setId(imgThId); HashSet<ImageTheme> hash = new HashSet<ImageTheme>(); hash.add(imgTh); t.setImageThemes(hash); ThemeService manager = ((ThemeService) ctx.getBean("themeService1")); manager.saveTheme(t); } }
Merci de votre aide.
Partager