2016-02-11 4 views

Antwort

1

würde ich die Dokumentation für diese

2.2.1 zitieren. Markieren eines POJO als persistente Entität

Jede persistente POJO Klasse ein Unternehmen ist und erklärt mit Hilfe der @Entity Anmerkung (auf Klassenebene):

@Entity public class Flug implementiert Serializable { Lange id;

@Id 
public Long getId() { return id; } 

public void setId(Long id) { this.id = id; } }   

@Entity die Klasse als Ganzes erklärt (das heißt eine persistente Klasse POJO ) erklärt @Id den Identifikator Eigenschaft dieser Entität. Die anderen Zuordnungsdeklarationen sind implizit. Die Klasse Flight wird der Flight-Tabelle zugeordnet, wobei die Spalten-ID als primäre Schlüsselspalte verwendet wird. Hinweis

Das Konzept der Konfiguration durch Ausnahme ist von zentraler Bedeutung für die JPA Spezifikation.

Je nachdem, ob Sie Felder oder Methoden annotieren, wird der von Hibernate verwendete Zugriffstyp Feld oder Eigenschaft sein. Die EJB3-Spezifikation erfordert , dass Sie Anmerkungen für den Elementtyp deklarieren, der auf zugegriffen wird, d. H. Die Getter-Methode, wenn Sie den Eigenschaftszugriff verwenden, das Feld , wenn Sie Feldzugriff verwenden. Das Mischen von Anmerkungen in beiden Feldern und Methoden sollte vermieden werden. Hibernate wird den Zugriffstyp von der Position von @Id oder @EmbeddedId erraten.

Es gibt etwas namens JPA aka Java Persistence API. Hibernate folgt den Richtlinien in seiner Implementierung. So stellen Sie sicher, dass es von JVM korrekt erkannt wird (und als Entity gemappt wird)

JPA wird jede Klasse einschließen, die mit @Entity im Persistenzmanagement-Setup versehen ist. Sie benötigen keine persistence.xml, wenn Sie Anmerkungen verwenden. Dies gilt auch für andere JPA-Implementierungen wie Open-JPA

Als Daumenregel zu Java. J2EE bietet Richtlinien in Form von Schnittstellen und Anmerkungen sowie verschiedene andere Möglichkeiten. Wenn jemand eine API-Implementierung von J2EE entwickelt, folgt er diesen Anweisungen. Dies ist der Weg der Standardisierung.

+0

_Damit es von JVM_ korrekt erkannt wird - klingt seltsam :) –

+0

Vielleicht können Sie es korrigieren. Mein Verständnis ist jede Anmerkung ist ein Metadaten für JVM oder Compiler. – Acewin

+0

Eine Annotation ist nur ein zusätzliches Attribut der Klasse. JVM oder Compiler machen nichts damit. Sie müssen Code schreiben, um eine Annotation der Klasse zu erhalten (wie Hibernate) und seinen Namen überprüfen. Versuchen Sie, Ihre eigene Annotation zu entwickeln (es ist ziemlich einfach) und Sie werden sehen. –

2

@Entity ist eine JPA-Annotation. Vom JPA specification, Abschnitt 2.1:

Die Entity-Klasse muss in dem XML-Descriptor als Entität bezeichnet mit der Entity Anmerkung oder mit Anmerkungen versehen werden.

Also, wenn Sie Anmerkungen für Zuordnungen verwenden, wird @Entity durch die Spezifikation beauftragt und Hibernate hat sich daran zu halten.

Können JPA-Designer das optional machen? Wahrscheinlich ja, aber es kostet wirklich nicht zu viel Mühe, es immer zu Entitätsklassen hinzuzufügen, um explizit zu bestimmen, dass eine Klasse eine Entität ist, und es somit zukünftigen Lesern des Codes leichter macht, den Zweck der Klasse sofort zu sehen.

1

Eigentlich brauchen Sie überhaupt keine Annotation. Hibernate ermöglicht seine .xml-Konfigurationen als eine einzige Konfigurationsquelle. Aber wenn Sie sich dafür entscheiden, Anmerkungen zu verwenden, benötigen Sie natürlich @Entity in Ihrer Modellklasse.

Im Grunde müssen Sie Hibernate nur sagen, was Ihre Modellklassen sind und wie sie den Datenbanktabellen zugeordnet werden. Sie können dies auch tun - über .xml configs oder über JPA-Anmerkungen. Darüber hinaus können Sie beide Ansätze in einer einzigen Anwendung kombinieren, und dies ist nicht zu verbieten.

+0

Und es geht umgekehrt. Wenn Sie Annotation verwenden, müssen Sie dem Persistenz-XML-Objekt keine Entität hinzufügen. – Acewin

Verwandte Themen