我有一个类似的JPA实体;
public class Inventory {
private String productname;
private String manufacturer;
private Float retailprice;
private Integer unitssold;
private String ourcomment;
}
在大约2/5的查询中,我需要整个实体,但剩下的时间我不对 unitssold 和我们的评论感兴趣
查询并获得大型结果列表但只需要3/5的信息就像是浪费。我想稍微优化一下,我有一个预感,这可以使用继承。
但是怎么样?
答案 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)
也许您可以尝试将另一个实体映射到同一个表,将其标记为只读。