【问题标题】:Query partial entities with JPA使用 JPA 查询部分实体
【发布时间】:2009-08-31 23:06:04
【问题描述】:

我有一个类似的 JPA 实体;

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

在大约五分之二的查询中,我需要整个实体,但其余时间我unitssoldourcomment 感兴趣>.

进行查询并获得大量结果列表但只需要 3/5 的信息感觉就像浪费。我想稍微优化一下,我预感这可以使用继承来完成。

但是怎么做呢?

【问题讨论】:

    标签: java jpa


    【解决方案1】:

    继承?没有。

    即使假设您有一个由列表中的前三个字段组成的实际域实体,并且 Inventory 会扩展它,您对该实体进行的任何查询都将不可避免地加载所有字段(如果映射则通过连接到不同的表)由于隐式多态性。

    您可以做的是将第 4 个和第 5 个属性映射为“惰性”;您的 JPA 提供者必须使用字节码检测才能做到这一点:

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

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

    说实话,这种方法只有在您的查询返回大型结果集并且“惰性”属性本身相当大时才值得(例如,我不会单独为 Integer 这样做;String 可能是可行的,如果它可能会变长)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 2016-01-21
        • 2011-10-16
        相关资源
        最近更新 更多