テーブルと結合の「結合」を行う JPA NativeSql にクエリがあります。複数のテーブルからのすべてのクエリ フィールドを持つエンティティを作成しました。なのでJPAではいつものように「@Column」「@table」ができません。
クエリの特定の値をエンティティに設定するにはどうすればよいですか?
を使用して、ネイティブ SQL クエリによって返された列をエンティティにマップできます@SqlResultSetMapping
。
例:
Query q = em.createNativeQuery(
"SELECT o.id AS order_id, " +
"o.quantity AS order_quantity, " +
"o.item AS order_item, " +
"i.name AS item_name, " +
"FROM Order o, Item i " +
"WHERE (order_quantity > 25) AND (order_item = i.id)",
"OrderResults");
@SqlResultSetMapping(name="OrderResults",
entities={
@EntityResult(entityClass=com.acme.Order.class, fields={
@FieldResult(name="id", column="order_id"),
@FieldResult(name="quantity", column="order_quantity"),
@FieldResult(name="item", column="order_item")
})
},
columns={
@ColumnResult(name="item_name")}
)
その他の例については、こちらを参照してください。
NATIVE SQL をビューに入れてみませんか? 次に、通常のエンティティがテーブルにマップされるように、ビューにマップされるエンティティを作成します。唯一の違いは、ビューに基づいてエンティティを挿入、更新、または削除できないことです。
JPA
nativeSQL
は generic と同じSQL
です。クエリunion
と同じ操作ができます。SQL
ただし、を使用する場合は、 JPQL
を使用する必要があります。これは、 が Union 操作をサポートしていないためです。EclipseLink
JPQL
JPA
JPAでDAOを使用するIMHOは良い考えではありません。しかし、Criteria APIを見てください。CriteriaBuilderで説明したようなクエリを作成できます。