2013-03-19 9 views
10

他のテーブルの列の単一の値を現在のオブジェクトにどのようにマップしますか?JPA注釈 - 現在のオブジェクトとは異なるテーブルから単一の値を取り出す方法

例:

class Foo { 
    @Id 
    @Column(name="FOO_ID") 
    private String fooId; 

    @Column(name="FOO_A") 
    private String fooA; 

    //Column to map to another table? 
    //is a one to one mapping - but don't want a separate object for this. 
    private String barCode; 
} 

表:Fields

はFoo:FOO_ID, FOO_A

バー:FOO_ID, BAR_CODE

私は別のオブジェクトを作成せずに BAR_CODEフィールドを取得するにはどうすればよい

(またはセカンダリテーブル)を使用してJPA annotations

+0

注意。 – Marcus

+0

なぜ別のオブジェクトを使いたくないのですか? – user489041

+0

かなり大規模なWebサービスです。オブジェクトの作成や1つのフィールドだけが必要なときに余分なデータを減らそうとしています。 – Marcus

答えて

18

secondary tableを使用してください。これにより、エンティティを1対1でマッピングし、別のテーブルを作成し、それを使用する列マッピングを定義することができます。

例:これは、検索のためのものであること

@Entity 
@Table(name = "foo") 
@SecondaryTable(name = "other_table", [email protected](name="id", referencedColumnName="FOO_ID")) 
public class Foo { 
    @Id 
    @Column(name="FOO_ID") 
    private String fooId; 

    @Column(name="FOO_A") 
    private String fooA; 

    @Column(table="OtherTable", name="barCode") 
    private String barCode; 
} 
+1

複数のセカンダリテーブルがある場合は、私の場合、オブジェクトは、参照されるいくつかの他のテーブルを持つ主要なオブジェクトです。オブジェクトの作成が必要な場合もあれば、@ ElementCollectionが機能する場合もあります。しかし、(コード/説明テーブルの説明フィールドを取得する場合のように)1つの列に対して別の解決策があるのが不思議でした。 – Marcus

+3

あなたが複数のセカンダリ表を持っている場合は、... [ 'SecondaryTables' @](http://docs.oracle.com/javaee/6/api/javax/persistence/SecondaryTables.html) – Perception

+2

@Perceptionを使用するには:いけませんそれは '@Column(table =" other_table "、name =" barCode ")'ですか?あなたは活用されている[この](http://stackoverflow.com/a/19454829/1654265)暗黙のうちに、それはタイプミスで、または他のいくつかの名前変換が他の場所がありますか?私が持っている場合は、まだfooとbarとの間ManyToOne関係がFooクラスのプロパティとしてアクセスしたいが、私はFooの中で外部キー協会(ManyToOne)でバーを指定しているが、その値が、実際にはバーのある何 –

関連する問題