ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
12c (12.1.2)
E48005-01
  目次へ移動
目次

前
 
次
 

@NoSql

@NoSqlを使用して、リレーショナルでない(つまり、SQLではない)データソースを指定します。EclipseLinkは、非リレーショナル・データをオブジェクトにマップし、JPAを介してそのデータにアクセスできます。

注釈要素

表2-42は、この注釈の要素を示しています。

表2-42 @NoSqlの注釈要素

注釈要素 説明 デフォルト

dataType

エンティティ構造の名前。dataTypeの目的は、使用されるNoSQLプラットフォームによって異なります。

  • MongoDBでは、JSONドキュメントが格納されるコレクション名です。

  • Oracle NoSQLでは、主なキー値の最初の部分です。

  • XMLファイルでは、ファイル名およびXMLメッセージングであり、XMLを使用します。


dataFormat

(オプション)データがデータベース内に格納されるタイプ構造(データ形式)。

  • INDEXED: クラスを値の配列にマップします。

  • MAPPED: クラスを一連のネストされたキー/値ペアにマップし、値は埋込みマップまたはリストになります。

    キー/値ストア、JSONデータベースおよびその他の構造化されたデータ・システムにマップするために使用します。

  • XML: クラスをXMLドキュメントにマップします。

    XMLデータストア、XMLファイル、XMLメッセージング・システムおよびその他のXMLシステムとともに使用します。

XML


使用方法

dataFormatは、使用されるNoSQLプラットフォームによって異なります。

サポートされるデータソース

EclipseLinkでは、JavaEE Connector Architecture CCI (Common Client Interface) APIを介した汎用NoSQLおよびEISデータソースと同様に、様々なNoSQLおよびEISプラットフォームがサポートされています。独自のEISPlatformサブクラスおよびJCAアダプタも定義できます。

EclipseLinkでは、次のデータソースがサポートされています。

例2-78に、XMLデータソースとの@NoSqlの使用を示します。

例2-78 @NoSql注釈とXMLの使用

@Entity
@NoSql(dataType="order")
public class Order {
  @Id
  @GeneratedValue
  @Field(name="@id")
  private long id;
  @Basic
  @Field(name="@description")
  private String description;
  @Embedded
  @Field(name="delivery-address")
  private Address deliveryAddress
  @ElementCollection
  @Field(name="orderLines/order-line")
  private List<OrderLine> orderLines;
  @ManyToOne
  @JoinField(name="customer-id")
  private Customer customer;
}
 
@Embeddable
@NoSql
public class OrderLine {
    @Field(name="@line-number")
    private int lineNumber;
    @Field(name="@item-name")
    private String itemName;
    @Field(name="@quantity")
    private int quantity;  
}

これにより、次のXMLデータが作成されます。

<order id="4F99702B271B1948027FAF06" description="widget order">
  <deliveryAddress street="1712 Hasting Street" city="Ottawa" province="ON" postalCode="L5J1H5"/>
  <order-lines>
      <order-line lineNumber="1" itemName="widget A" quantity="5"/>
      <order-line lineNumber="2" itemName="widget B" quantity="1"/>
      <order-line lineNumber="3" itemName="widget C" quantity="2"/>
  <order-lines>
  <customer-id>4F99702B271B1948027FAF08</customer-id>
<order>

例2-79に、JSONデータソースとの@NoSqlの使用を示します。

例2-79 @NoSql注釈とJSONの使用

@Entity
@NoSql(dataType="orders", dataFormat=DataFormatType.MAPPED)
public class Order {
  @Id
  @GeneratedValue
  @Field(name="_id")
  private long id;
  @Basic
  @Field(name="description")
  private String description;
  @Embedded
  @Field(name="deliveryAddress")
  private Address deliveryAddress
  @ElementCollection
  @Field(name="orderLines")
  private List<OrderLine> orderLines;
  @ManyToOne
  @JoinField(name="customerId")
  private Customer customer;
}
 
@Embeddable
@NoSql(dataFormat=DataFormatType.MAPPED)
public class OrderLine {
    @Field(name="lineNumber")
    private int lineNumber;
    @Field(name="itemName")
    private String itemName;
    @Field(name="quantity")
    private int quantity;  
}

これにより、次のJSONドキュメントが作成されます。

{
  "_id": "4F99702B271B1948027FAF06",
  "description": "widget order",
  "deliveryAddress": {
      "street": "1712 Hasting Street",
      "city": "Ottawa",
      "province": "ON",
      "postalCode": "L5J1H5",
  },
  "orderLines": [
      {"lineNumber": "1", "itemName": "widget A", "quantity": "5"},
      {"lineNumber": "2", "itemName": "widget B", "quantity": "1"},
      {"lineNumber": "3", "itemName": "widget C", "quantity": "2"}
  ],
  "customerId": "4F99702B271B1948027FAF08",
}

関連項目

詳細は、次を参照してください。