8

テーブルと結合の「結合」を行う JPA NativeSql にクエリがあります。複数のテーブルからのすべてのクエリ フィールドを持つエンティティを作成しました。なのでJPAではいつものように「@Column」「@table」ができません。

クエリの特定の値をエンティティに設定するにはどうすればよいですか?

4

5 に答える 5

9

を使用して、ネイティブ 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")}
)

その他の例については、こちらを参照してください。

于 2013-09-30T11:36:07.837 に答える
2

これには、オーバーロードされたEntityManager#createNativeQuery(sql,resultClass)メソッドを使用できます。

于 2013-09-30T11:22:02.217 に答える
2

NATIVE SQL をビューに入れてみませんか? 次に、通常のエンティティがテーブルにマップされるように、ビューにマップされるエンティティを作成します。唯一の違いは、ビューに基づいてエンティティを挿入、更新、または削除できないことです。

于 2013-09-30T11:28:57.373 に答える
0

JPAnativeSQLは generic と同じSQLです。クエリunionと同じ操作ができます。SQLただし、を使用する場合は、 JPQLを使用する必要があります。これは、 が Union 操作をサポートしていないためです。EclipseLinkJPQLJPA

于 2013-09-30T11:25:10.733 に答える
0

JPAでDAOを使用するIMHOは良い考えではありません。しかし、Criteria APIを見てください。CriteriaBuilderで説明したようなクエリを作成できます。

于 2013-09-30T11:21:43.900 に答える