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

为什么不把 NATIVE SQL 放到一个视图中呢?然后只需创建一个映射到视图的实体,就像任何普通实体映射到表一样。唯一的区别是您不能插入、更新或删除基于视图的实体。

于 2013-09-30T11:28:57.373 回答
2

您可以为此使用重载的EntityManager#createNativeQuery(sql,resultClass)方法。

于 2013-09-30T11:22:02.217 回答
0

JPAnativeSQL与 generic 相同SQL。您可以执行与查询union相同的操作。SQL但是,如果你想用JPQL,而不是你需要使用EclipseLink,因为 JPQLJPA支持 Union 操作。

于 2013-09-30T11:25:10.733 回答
0

恕我直言,将 DAO 与 JPA 一起使用并不是一个好主意。但是看看Criteria API。您可以像使用CriteriaBuilder描述的那样构建此类查询。

于 2013-09-30T11:21:43.900 回答