Bonjour,
Dans mon application, je dispose d'un certain nombre d'objets persistants, qui ont tous une même en-tête en commun (un même ensemble de champs, présent dans toutes les tables). Dans cette en-tête se compose la primary key composée de 3 champs de chacun de mes objets : un ID à auto incrément, et deux clés étrangères.
Le problème, c'est que ça ne compile pas. Si je supprime la notion de PK composite dans mon code, ça compile bien. Pour faire ma PK j'ai créé une classe-ID comme le montre le bouquin.
Voici à quoi ressemble mon code :
- Ma classe-clé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @Embeddable public class CompositePK { @GeneratedValue(strategy = GenerationType.AUTO) protected Long id; @ManyToOne protected Employee srcEmployee; @ManyToOne protected Employee destEmployee; // ... }
- Ma classe en-tête :
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 @IdClass(CompositePK.class) @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class Header implements Serializable { private static final long serialVersionUID = 1L; /* Composite PK : */ @Id protected Long id; @Id protected Employee srcEmployee; @Id protected Employee destEmployee; /* Other header fields */ protected String field1; protected String field2; // ... }
- Ma classe concrète en bout de chaîne :
Mon problème de compilation intervient sur cette dernière classe, avec le message d'erreur suivant sur la ligne @Entity : "The Entity has no primary key attribute defined"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Entity public class Foo extends Header { // ... }
Cette PK est bien définie par héritage, d'ailleurs, une PK simple (non composite) est bien détectée.
Petites précisions :
Je suis sur GlassFish Server Open Source Edition 3.0.1 (build 22) et JPA 2.0 dont voici un extrait du persistence.xml :
Merci par avance pour vos suggestions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <persistence version="2.0" 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"> ... <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> ... </persistence>
Partager