Bonjour,

J'ai commencé à travailler comme ça :

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 {
...
}
J'ai ainsi pu profiter du polymorphisme et faire des requetes me permettant de retrouver tous les A ou tous les E etc.

Ensuite j'ai voulu créer une autre classe, comme suit :
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;
...
}
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
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;
...
}
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 :
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.