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

来源:互联网 发布:excel中如何用宏编程 编辑:程序博客网 时间:2024/06/14 20:26
执行 @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"),})})@Entitypublic class Order {@Idprotected 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], ...}
0 0
原创粉丝点击