您的位置:首页 > 其它

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

2014-09-28 23:20 645 查看
执行 @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], ...}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jpa
相关文章推荐