Ist die JPA @Embedded-Anmerkung obligatorisch?

10

Ich habe versucht, die <% strong> Annotation @Embedded wegzulassen, und trotzdem wurden die Felder in die Tabelle eingebettet. Ich kann nichts finden, was sagen würde, dass die @Embedded Annotation optional ist.

Ist es oder ist es nicht optional?

Der folgende Code

%Vor%

erzeugt immer dieselbe Tabelle

%Vor%

auch wenn ich nicht spezifiziere @Embedded .

Meine Konfiguration:

  • JBoss EAP 6.4.0
  • hibernate-jpa-2.0-api-1.0.1.Final-redhat-3.jar

Die JPA-Spezifikation sagt:

Ссылка

  

@javax.persistence.Embedded

     

Gibt ein persistentes Feld oder eine persistente Eigenschaft einer Entität an, deren Wert eine Instanz einer einbettbaren Klasse ist. Die embeddable-Klasse muss als Embeddable annotiert werden.

Ссылка

  

@javax.persistence.Embeddable

     

Gibt eine Klasse an, deren Instanzen als ein intrinsischer Teil einer besitzenden Entität gespeichert werden und die Identität der Entität teilen. Jede der persistenten Eigenschaften oder Felder des eingebetteten Objekts wird der Datenbanktabelle für die Entität zugeordnet.

    
Honza Zidek 01.07.2015, 09:36
quelle

2 Antworten

1

Im Falle der Verwendung von Hibernate ist es egal, ob Sie das Feld selbst mit Anmerkungen versehen (als @Embedded ) oder ob Sie die referenzierte Klasse mit Anmerkungen versehen (als @Embeddable ). Mindestens eines von beiden wird benötigt, damit Hibernate den Typ bestimmen kann.

Und es gibt eine (implizite) Aussage darüber in der Hibernate-Dokumentation, siehe hier: Ссылка

Es sagt:

  

Die Entität Person hat zwei Komponenteneigenschaften, homeAddress und   geboren in. Die homeAddress-Eigenschaft wurde nicht mit Anmerkungen versehen, sondern mit dem Ruhezustand verknüpft   wird vermuten, dass es sich um eine dauerhafte Komponente handelt, indem Sie nach dem suchen   @ Embeddable-Annotation in der Address-Klasse.

    
Kevin Peters 30.12.2016, 13:41
quelle
0

Embedded-Embeddable ist nicht obligatorisch, aber es gibt Ihnen eine schöne OOP-Perspektive der Beziehung Ihrer Entitäten. Eine andere Möglichkeit, dies zu tun, ist die Verwendung von OneToOne mapping. Aber in solch einem Fall wird die Entity in eine separate Tabelle geschrieben (während im Fall von embedded es in die separate Tabelle in Ihrem DB geschrieben werden kann).

    
asm0dey 26.09.2015 18:34
quelle

Tags und Links