使用JPA查询部分实体

时间:2009-08-31 23:06:05

标签: java jpa

我有一个类似的JPA实体;

public class Inventory {
 private String productname;
 private String manufacturer;
 private Float retailprice;
 private Integer unitssold;
 private String ourcomment;
}

在大约2/5的查询中,我需要整个实体,但剩下的时间我 unitssold 我们的评论感兴趣

查询并获得大型结果列表但只需要3/5的信息就像是浪费。我想稍微优化一下,我有一个预感,这可以使用继承。

但是怎么样?

2 个答案:

答案 0 :(得分:4)

继承?否。

即使假设您有一个实际的域实体,其中包含列表中的前三个字段,而Inventory也会对其进行扩展,但您对该实体所做的任何查询都将不可避免地加载所有字段(通过join由于隐式多态性,如果映射到不同的表。

你可以做的是将第4和第5个属性映射为“懒惰”;您的JPA提供程序必须使用字节码检测才能执行此操作:

@Basic(fetch = FetchType.LAZY)
private Integer unitssold;

@Basic(fetch = FetchType.LAZY)
private String ourcomment;

您必须在需要获取所有内容的查询中指定fetch all properties;其他人在首次访问之前不会检索属性值。

老实说,只有当你的查询返回大型结果集并且“懒惰”属性本身相当大时,这种方法才有价值(例如我不会单独使用Integer; String如果它可以变长可能是可行的)

答案 1 :(得分:0)

也许您可以尝试将另一个实体映射到同一个表,将其标记为只读。