| Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 12c (12.1.2) E48005-01 |
|
![]() 前 |
![]() 次 |
@NoSqlを使用して、リレーショナルでない(つまり、SQLではない)データソースを指定します。EclipseLinkは、非リレーショナル・データをオブジェクトにマップし、JPAを介してそのデータにアクセスできます。
注釈要素
表2-42は、この注釈の要素を示しています。
表2-42 @NoSqlの注釈要素
| 注釈要素 | 説明 | デフォルト |
|---|---|---|
|
|
エンティティ構造の名前。
|
|
|
|
(オプション)データがデータベース内に格納されるタイプ構造(データ形式)。
|
XML |
使用方法
dataFormatは、使用されるNoSQLプラットフォームによって異なります。
MongoDBでは、MAPPEDを使用します。
Oracle NoSQLでは、MAPPED (キー/値データ用)またはXML (単一XMLドキュメント用)を使用します。
XMLファイルおよびXMLメッセージングでは、XMLを使用します。
サポートされるデータソース
EclipseLinkでは、JavaEE Connector Architecture CCI (Common Client Interface) APIを介した汎用NoSQLおよびEISデータソースと同様に、様々なNoSQLおよびEISプラットフォームがサポートされています。独自のEISPlatformサブクラスおよびJCAアダプタも定義できます。
EclipseLinkでは、次のデータソースがサポートされています。
MongoDB
Oracle NoSQL
XMLファイル
JMS
Oracle AQ
例
例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",
}
関連項目
詳細は、次を参照してください。
Oracle Coherence Oracle ToplinkおよびCoherence Grid統合ガイド
『Oracle TopLinkの理解』の非SQLデータベースの使用に関する項
『Oracle TopLinkの理解』のNoSQLデータベースの使用に関する項
『Oracle TopLinkソリューション・ガイド』のTopLinkと非リレーショナル・データベースの使用に関する項