2010-12-13 11 views
25

Ich komme gerade (zurück) mit EJB auf Hochtouren und während meiner Abwesenheit hat es sich drastisch geändert (bisher zum Besseren). Ich bin jedoch auf ein Konzept gestoßen, mit dem ich mich abmühen muss und das ich besser verstehen möchte, da es in unserem (wo ich arbeite, nicht bei mir und all den Stimmen in meinem Kopf) recht häufig verwendet wird.Was bedeutet @AttributeOverride?

Hier ist das Beispiel, das ich in einem Buch gefunden habe. Es ist Teil eines Beispiels zeigt, wie die @EmbeddedId Anmerkung verwenden:

@Entity 
public class Employee implements java.io.Serializable 
{ 
    @EmbeddedId 
    @AttributeOverrides({ 
     @AttributeOverride(name="lastName", [email protected](name="LAST_NAME"), 
     @AttributeOverride(name="ssn", [email protected](name="SSN")) 
    }) 

    private EmbeddedEmployeePK pk; 

    ... 
} 

Die EmbeddedEmployeePK Klasse ist eine ziemlich einfache @Embeddable-Klasse, die ein Paar @Columns definiert: lastName und ssn.

Oh, und ich hob dieses Beispiel aus O'Reillys Enterprise JavaBeans 3.1 von Rubinger & Burke.

Vielen Dank im Voraus für jede Hilfe, die Sie mir geben können.

Antwort

33

Es heißt, dass die Attribute, aus denen die eingebettete ID besteht, vordefinierte Spaltennamen (durch explizite oder implizite Zuordnungen) haben können. Indem Sie die @AttributeOverride verwenden, sagen Sie "ignorieren Sie, welche anderen Informationen Sie in Bezug auf welche Spalte es gespeichert ist, und verwenden Sie die, die ich hier angeben".

+0

Ok, cool, das macht so viel mehr Sinn als das, was die Autoren in das Buch schreiben. Vielen Dank! – jaydel

+0

nette und vernünftige Antwort –

8

Die EmbeddedEmployeePK-Klasse ist eine recht unkomplizierte @ Embeddable-Klasse, die ein Paar @Columns: lastName und ssn definiert.

Nicht ganz - EmbeddedEmployeePK definiert ein Paar Eigenschaften, die Spalten dann abgebildet werden. Mit den @AttributeOverride Annotationen können Sie die Spalten überschreiben, denen die Eigenschaften der eingebetteten Klasse zugeordnet sind. Der Anwendungsfall hierfür ist, wenn die embeddable-Klasse in verschiedenen Situationen verwendet wird, in denen sich die Spaltennamen unterscheiden, und einige Mechanismen erforderlich sind, damit Sie diese Spaltenzuordnungen ändern können. Angenommen, Sie haben eine Entität, die zwei separate Instanzen derselben eingebetteten Datei enthält - sie können nicht beide denselben Spaltennamen zuordnen.

0

JPA versucht, Feldnamen den Spaltennamen in einer Datenquelle zuzuordnen. Sie sehen also die Übersetzung zwischen dem Namen einer Feldvariablen und dem Namen einer Spalte in einer Datenbank.

16

AttributeOverride

In der Userdetails Klasse habe ich außer Kraft gesetzt homeAddress & officeAddress mit Address

0

können Sie außer Kraft setzen auch andere Spalteneigenschaften (nicht nur Namen).
Angenommen, Sie möchten die Länge des SSN ändern, je nachdem, wer Ihre Komponente einbettet. Sie können eine @AttributeOverride für die Spalte wie folgt definieren:

@AttributeOverrides({ 
    @AttributeOverride(name = "ssn", column = @Column(name = "SSN", length = 11)) 
}) 
private EmbeddedEmployeePK pk; 

"2.2.2.4. Embedded objects (aka components)" in der Hibernate Annotations-Dokumentation.

Um andere @Column Eigenschaften (wie name und nullable) zu erhalten, halten Sie sie in der überschriebenen Spalte wie in der ursprünglichen Spalte angegeben.