Bonjour,
J'ai commencé à travailler comme ça :
J'ai ainsi pu profiter du polymorphisme et faire des requetes me permettant de retrouver tous les A ou tous les E etc.
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 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @MappedSuperclass public abstract class A { ... } @MappedSuperclass public abstract class B extends A { ... } @MappedSuperclass public abstract class C extends A { ... } @Entity public class D extends B { ... } @Entity public class E extends C { ... }
Ensuite j'ai voulu créer une autre classe, comme suit :
Comme A est abstraite, j'ai du la modifier comme suit car Hibernate demande une entité :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 @Entity public class F { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "A_ID", nullable = false) private A aItem; ... }
Si je persiste une instance de F, Hibernate fait une insertion dans la nouvelle table A (avant on avait pas d'entité) et une insertion dans la table F. Jusqu'ici, tout va bien. Sauf que maintenant quand j'essaye de remonter tous les A, Hibernate va chercher aussi dans la table A ! Du coup, il me renvoie l'exception suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @MappedSuperclass public abstract class A { @Id private String id; @OneToMany(cascade = CascadeType.ALL, mappedBy = "aItem", fetch = FetchType.LAZY ) @JoinColumn(name = "A_ID", nullable = false) private List<A> aList; ... }
org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: com.app.A
Je comprend pourquoi mais du coup je ne sais pas comment m'en sortir. J'ai pensé à passer de InheritanceType.TABLE_PER_CLASS à InheritanceType.JOINED mais ce n'est pas la stratégie d'héritage qui me plait le plus. Quelqu'un a une idée ? je sèche.
Merci d'avance.
JM.
Partager