Bonjour,
J'essaye de mieux comprendre les annotations avec JPA/Hibernate et SQLServer. J'ai créé un projet simple : une classe abstraite nommée "Articles". Deux classes en héritent : Ramette qui ajoute un grammage et Stylo qui ajoute une couleur. Le code ci-dessous ne fonctionne pas et je ne parviens pas à corriger les erreurs. Auriez-vous une idée ? Merci !
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 package fr.eni.hibernate.entities; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; @Entity @Table(name = "Articles") @Inheritance( strategy = InheritanceType.SINGLE_TABLE ) @DiscriminatorColumn( name="type", discriminatorType = DiscriminatorType.STRING) public abstract class Articles implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "idarticle") private Integer idarticle; @Column(name = "reference") private String reference; @Column(name = "marque") private String marque ; @Column(name = "designation") private String designation; @Column(name = "prixUnitaire") private float prixUnitaire ; @Column(name = "qteStock") private int qteStock ; public Articles() { } public Integer getIdArticle() { return idarticle; } public String getReference() { return reference; } public void setReference(String reference) { this.reference = reference; } public String getMarque() { return marque; } public void setMarque(String marque) { this.marque = marque; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } public float getPrixUnitaire() { return prixUnitaire; } public void setPrixUnitaire(float prixUnitaire) { this.prixUnitaire = prixUnitaire; } public int getQteStock() { return qteStock; } public void setQteStock(int qteStock) { this.qteStock = qteStock; } @Override public String toString() { return "Article [idArticle=" + idarticle + ", reference=" + reference + ", marque=" + marque + ", designation=" + designation + ", prixUnitaire=" + prixUnitaire + ", qteStock=" + qteStock + "]"; } }
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 package fr.eni.hibernate.entities; import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity @DiscriminatorValue("Ramette") public class Ramette extends Articles { private static final long serialVersionUID = 1L; private int grammage; public Ramette() { } @Column(name = "grammage") public int getGrammage() { return grammage; } public void setGrammage(int grammage) { this.grammage = grammage; } @Override public String toString() { return super.toString() + " Ramette [grammage=" + grammage + "]"; } }
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 package fr.eni.hibernate.entities; import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; @Entity @DiscriminatorValue("Stylo") public class Stylo extends Articles { private static final long serialVersionUID = 1L; private String couleur; public Stylo() { } @Column(name = "couleur") public String getCouleur() { return couleur; } public void setCouleur(String couleur) { this.couleur = couleur; } @Override public String toString() { return super.toString() + " Stylo [couleur=" + couleur + "]"; } }
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 package fr.eni.hibernate.entities; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.TypedQuery; public class Main { public static void main(String[] args) throws Exception { EntityManagerFactory entityManagerFactory = null; EntityManager entityManager = null; try { entityManagerFactory = Persistence.createEntityManagerFactory("WebStore"); entityManager = entityManagerFactory.createEntityManager(); TypedQuery<Articles> query = entityManager.createQuery("from Articles", Articles.class); List<Articles> art = query.getResultList(); for (Articles article : art) { System.out.println(art.getClass().getName()); System.out.println("\t" + article); } } finally { if (entityManager != null) entityManager.close(); if (entityManagerFactory != null) entityManagerFactory.close(); } } }
Code XML : 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 <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="WebStore"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <class>fr.eni.hibernate.entities.Articles</class> <class>fr.eni.hibernate.entities.Stylo</class> <class>fr.eni.hibernate.entities.Ramette</class> <properties> <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost;database=PAPETERIE_TEST" /> <property name="javax.persistence.jdbc.user" value="sa" /> <property name="javax.persistence.jdbc.password" value="x" /> <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> <property name="hibernate.format_sql" value="false" /> </properties> </persistence-unit> </persistence>
Code SQL : 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 CREATE TABLE Articles( idarticle INT IDENTITY(1,1), reference varchar(10) NOT NULL, marque nvarchar(200) NOT NULL, designation nvarchar(250) NOT NULL, prixUnitaire float NOT NULL, qteStock int NOT NULL, grammage int NULL, couleur nvarchar(50) NULL, type nchar(10) NOT NULL, CONSTRAINT PK_Articles PRIMARY KEY (idarticle) ) INSERT INTO Articles (reference, marque, designation, prixUnitaire, qteStock, grammage, couleur, type) VALUES ('Bic', 'BBOrange', 'Bic bille Orange', 1.2, 20, 0, 'Bleu', 'Stylo'), ('Bic', 'BBOrange', 'Bic bille Orange', 1.2, 20, 0,'noir', 'Stylo'), ('Clairef', 'CRA4S', 'Ramette A4 Sup', 9, 20, 80, null, 'Ramette');
Voici l'erreur qui s'affiche : Object [id=1] was not of the specified subclass [fr.eni.hibernate.entities.Articles] : Discriminator: Stylo
Partager