2015-12-16 4 views
5

Ich verwende Spring Boot 1.3 mit Spring Data JPA. Ich möchte frühe Primärschlüsselgenerierung verwenden, die ein dediziertes Objekt für den Primärschlüssel verwendet (wie in Implementing Domain Driven Design empfohlen).Entität hat keine persistente ID-Eigenschaft beim Extrahieren einer Oberklasse aus @EmbeddedId-Klasse

Angenommen, diese Einheit:

@Entity 
public class Book { 
    @EmbeddedId 
    private BookId id; 
} 

und diesen Wert Objekt:

@Embeddable 
public class BookId implements Serializable { 

    private UUID id; 

    protected BookId(){} //for hibernate 

    public BookId(UUID id) { 
    this.id = id; 
    } 

    public UUID getId() { 
    return id; 
    } 
} 

Dann das funktioniert gut.

public class EntityUuidId implements Serializable { 

    private UUID id; 

    protected EntityUuidId(){} //for hibernate 

    public EntityUuidId(UUID id) { 
    this.id = id; 
    } 

    public UUID getId() { 
    return id; 
    } 
} 

Jetzt sind die BookID Klasse Änderungen: Allerdings habe ich eine übergeordnete Klasse für alle ID-Klassen, so etwas wie erstellen möchten

@Embeddable 
public class BookId extends EntityUuidId { 

    protected BookId(){} //for hibernate 

    public BookId(UUID id) { 
    super(id); 
    } 
} 

Das Problem ist jetzt, wenn ich meine Anwendung ausführen gibt es die folgende Ausnahme:

org.hibernate.AnnotationException: BookId has no persistent id property: Book.id 

Warum funktioniert das plötzlich nicht mehr?

+0

in der Tat, weil "ID" ist nicht Teil einer JPA-Klasse annotiert, daher ist nicht persistent. Sie könnten Getter/Setter für die ID der Unterklasse haben. –

+0

Ich bin nicht sicher, ob '@ MappedSupperclass' als Elternteil von' @ Embeddable' verwendet werden kann, aber es könnte einen Versuch wert sein. –

+0

EclipseLink scheint es zu unterstützen: [link] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=283028) –

Antwort

6

@MappedSuperclass Setzen Sie auf EntityUuidId Klasse, auf diese Weise seine Eigenschaften als persistent behandelt werden.

Verwandte Themen