【JPA】关于JPA使用原生多表查询,返回实体集合的方法 [@FiledResult]注解应用

执行 @NamedNativeQuery 时,它可以返回实体(包括不同类型的实体)、标量值或实体和标量值的组合。
默认情况下,JPA 持续性提供程序假设在使用 @EntityResult 返回实体时,SELECT 语句将包含与返回的实体的所有字段或
属性相对应的所有列,且SELECT 语句中的列名对应于字段或属性名(未使用AS 语句)。
如果 SELECT 语句只包含某些与返回的实体的字段或属性相对应的列,或 SELECT 语句中的列名并不对应于字段或属性名
(使用了 AS 语句),则在使用 @EntityResult 返回实体时,请使用 @FieldResult 批注将 SELECT 语句中的列映射到字段
或属性。
有䎔详细信息,另请参阅 @ColumnResult 和 @SqlResultSetMapping。
表1-15 列出了此批注的属性。有䎔更多详细信息,请参阅 API。
表1-15 @FieldResult 属性
属性 必需说明
column 将 column 设置为 SELECT 语句中使用的列的 String 名称。如果在 SELECT 中使用列䫲名(AS 语
句),请将 column 设置为列䫲名。
name 将 name 设置为实体的字段或属性名(作为 String),该名称对应于 column 属性指定的列名。
示例1-32 显示了如何使用此批注将 Order 和 Item(请参阅示例1-33)实体包含在结果列表(请参阅示例1-34)中。在该
示例中,结果列表将为 Object 数组的 List,如:{[Order, Item], [Order, Item], ...}。
示例1-32 使用@EntityResult 和@FieldResult 的Order 实体
@SqlResultSetMapping(
name="OrderResults",
entities={
@EntityResult(
entityClass=Order.class, 
fields={
@FieldResult(name="id", column="order_id"),
@FieldResult(name="quantity", column="order_quantity"),
@FieldResult(name="item", column="order_item")
}
),
@EntityResult(
entityClass=Item.class,
fields={
@FieldResult(name="id", column="item_id"),
@FieldResult(name="name", column="item_name"),
}
)
}
)
@Entity
public class Order {
@Id
protected int id;
protected long quantity;
protected Item item;
...
}


http://www.oracle.com/technology/global/cn/produ...plink/jpa/resources/toplink-jpa-annotations.html(第23/70 页)[2008-3-17 16:47:57]
1 JPA 批注参考
示例1-33 Item 实体
@Entity
public class Item {
@Id
protected int id;
protected String name;
...
}
示例1-34 结合使用@SqlResultSetMapping 与@EntityResult 的原生查询
Query q = entityManager.createNativeQuery(
"SELECT o.id AS order_id, " +
"o.quantity AS order_quantity, " +
"o.item AS order_item, " + 
"i.id AS item_id, " +
"i.name AS item_name, " +
"FROM Order o, Item i " +
"WHERE (order_quantity > 25) AND (order_item = i.id)",
"OrderResults"
);
List resultList = q.getResultList(); 


// List of Object arrays:{[Order, Item], [Order, Item], ...}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值