web-dev-qa-db-ja.com

@AttributeOverrideはどういう意味ですか?

私は現在、EJBの速度に近づいています(戻ってきています)。しかし、私は苦労している概念に出くわし、それは私たちのコードで使用されているように見えるので、よりよく理解したいと思っています(私と私の頭のすべての声ではなく).

これが私が本で見つけた例です。これは、@EmbeddedIdアノテーションの使用方法を示す例の一部です。

@Entity
public class Employee implements Java.io.Serializable
{
    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name="lastName", column=@Column(name="LAST_NAME"),
        @AttributeOverride(name="ssn", column=@Column(name="SSN"))
    })

    private EmbeddedEmployeePK pk;

    ...
}

EmbeddedEmployeePKクラスは、@Embeddableのペアを定義するかなり単純な@Columnsクラスです:lastNamessn

ああ、私はこの例を、Rubinger&BurkeによるO'ReillyのEnterprise JavaBeans 3.1から取り上げました。

助けてくれてありがとう。

31
jaydel

埋め込まれたIDを構成する属性には、(明示的または暗黙的なマッピングを介して)事前定義された列名がある場合があると言っています。 @AttributeOverrideを使用することにより、「格納されている列に関する他の情報を無視し、ここで指定したものを使用する」と言っています。

39
zmf

AttributeOverride

UserDetailsクラスでは、homeAddressofficeAddressAddressでオーバーライドしました

このOne Address POJOは、DBの2つのテーブルに対して機能します。

DB:

Table1      Table2
STREET_NAME HOME_STREET_NAME
CITY_NAME   HOME_CITY_NAME
STATE_NAME  HOME_STATE_NAME
PIN_CODE    HOME_PIN_CODE
26
Ravi Parekh

EmbeddedEmployeePKクラスは、@ ColumnsのペアであるlastNameとssnを定義する非常に単純な@Embeddableクラスです。

まったくそうではありません-EmbeddedEmployeePKpropertiesのペアを定義し、列にマッピングされます。 @AttributeOverride注釈を使用すると、埋め込みクラスのプロパティがマップされる列をオーバーライドできます。

これの使用例は、埋め込み可能なクラスが列名が異なるさまざまな状況で使用され、それらの列マッピングを変更できるようにするための何らかのメカニズムが必要な場合です。たとえば、同じembeddableの2つの個別のインスタンスを含むエンティティがあるとします-両方を同じ列名にマッピングすることはできません。

8
skaffman

名前だけでなく、他の列プロパティもオーバーライドできます。
コンポーネントを埋め込むユーザーに基づいてSSNの長さを変更すると仮定します。次のように、列の@AttributeOverrideを定義できます。

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

Hibernate Annotationsドキュメントの "2.2.2.4。埋め込みオブジェクト(別名コンポーネント)" を参照してください。

他の@Columnプロパティ(namenullableなど)を保持するために、元の列で指定したものと同じように、オーバーライドされた列でそれらを保持します。

1
naXa

JPAはフィールド名をデータソースの列名にマップしようとするため、ここで見ているのは、フィールド変数の名前とデータベースの列の名前との間の変換です。

0
Mike Yockey