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类而只是父类而不加载任何子类?
解决方法如下所述:
将您的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特定的注释