シリーズの継続。 以前:
Java EE 6. JPA 2.0の概要、パート1:はじめに 。 この記事では、JPAの変更を引き続き確認します。
インラインコレクション
JPA 2.0で導入されたElementCollectionコンポーネントを使用すると、埋め込み型オブジェクトのコレクション、または「単純な」タイプ(整数、文字列など)のコレクションなど、JPA 1.0の珍しいタイプのコレクションの表示ポリシーを設定できます。 このコンポーネントは、Mapとの関係の定義でも使用されます。Mapのキーはあらゆる種類のオブジェクトであり、値は埋め込み可能または「単純な」オブジェクトです。
ElementCollectionの値は常に@CollectionTableアノテーションで指定された個別のテーブルに保存されます。 CollectionTableは、複合主キーの場合、テーブル名と@JoinColumnまたは@JoinColumnsを分配します。
埋め込みオブジェクトのコレクション
ElementCollectionは、埋め込みオブジェクトのコレクションを定義するために使用されます。 埋め込みマッピングの宣言はOneToManyに似ていますが、ターゲットテーブルはエンティティではなく埋め込み可能です。 これにより、フィードバックを定義してIdを導入する必要なく、単純なオブジェクトのコレクションを簡単に宣言できます。
ElementCollectionとOneToManyの違いは、親オブジェクトに関係なく、ターゲットオブジェクトを直接選択、保存、またはマージできないことです。 カスケードポリシーはありません;コレクションオブジェクトの状態は、親オブジェクトの状態と同期しています。 まあ、一般的に、すべては埋め込みオブジェクトと同じです。 ただし、ElementCollectionはタイプを選択するように設定でき、デフォルトでは遅延です。
小さな例が来ました:
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
import javax.persistence.*; import java.util. List ; @Entity public class Customer { @Id @Column(name= "CUSTOMER_ID" ) private Long id; private String name; @ElementCollection @CollectionTable( name= "CUST_ADDRESS" , joinColumns=@JoinColumn(name= "OWNER_ID" ) ) private List <Address> phones; //:~ }
- import javax.persistence.Column;
- import javax.persistence.Embeddable;
- @Embeddable
- パブリック クラス Address {
- プライベート ストリングシティ。
- プライベート ストリングストリート;
- @Column(name = "ZIP_CODE" )
- プライベート ストリング zip;
- //:〜次はアクセサです
- }
出力は、データベース内の次のスキーマになります。
「単純な」タイプのオブジェクトのコレクション
単純なコレクションでは、すべてが単純です。ElementCollectionが使用され、値用に個別のテーブルが作成されます。すべてがOneToManyに似ていますが、ターゲットオブジェクトはエンティティでなく単純です。 このアプローチの欠点は、次の段落にリストされているものと同様です。
例の時間です:
- import javax.persistence。*;
- java.utilをインポートします。 一覧
- @Entity
- パブリック クラス Customer {
- @Id
- @Column(name = "CUSTOMER_ID" )
- プライベート ロング ID;
- プライベート 文字列名。
- @ElementCollection
- @CollectionTable(
- name = "CUST_ADDRESSES" 、
- joinColumns = @ JoinColumn(name = "OWNER_ID" )
- )
- @Column(name = "ADDRESS" )
- プライベート リスト < 文字列 >アドレス。
- //:〜次はアクセサです
- }
出力は、データベース内の次のスキーマになります。