表每子类继承关系:如何在不加载任何子类的情况下查询Parent类??? (休眠)

Art*_*ald 7 java performance inheritance hibernate hql

假设每个子类表继承关系可以在下面描述(来自wikibooks.org - 见这里)

注意父类不是抽象的

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Project {

    @Id
    private long id;

    // Other properties

}

@Entity
@Table(name="LARGEPROJECT")
public class LargeProject extends Project {

    private BigDecimal budget;

}

@Entity
@Table(name="SMALLPROJECT")
public class SmallProject extends Project {

}
Run Code Online (Sandbox Code Playgroud)

我有一个场景,我只需要检索Parent类.由于性能问题,我应该怎么做才能运行HQL查询以便检索Parent类而只是父类而不加载任何子类?

Art*_*ald 7

解决方法如下所述:

将您的Parent类定义为MappedSuperClass.我们假设父类映射到ToPARENT_TABLE

@MappedSuperClass
public abstract class AbstractParent implements Serializable {

    @Id
    @GeneratedValue
    private long id;

    @Column(table="PARENT_TABLE")        
    private String someProperty;

    // getter's and setter's

}
Run Code Online (Sandbox Code Playgroud)

对于每个子类,扩展AbstractParent类并定义其SecondaryTable.父类中定义的任何持久字段都将映射到SecondaryTable定义的表.最后,如果需要,使用AttributeOverrides

@Entity
@SecondaryTable("PARENT_TABLE")
public class Child extends AbstractParent {

    private String childField;

    public String getChildProperty() {
        return childField;
    }

}
Run Code Online (Sandbox Code Playgroud)

并定义另一个实体,目的是仅检索父类

@Entity
@Table(name="PARENT_TABLE")
@AttributeOverrides({
    @AttributeOverride(name="someProperty", column=@Column(name="someProperty"))
})
public class Parent extends AbstractParent {}
Run Code Online (Sandbox Code Playgroud)

没有其他的.如上所示,我只使用了JPA特定的注释