假设 每个子类继承关系 的 表 如下所示(来自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 { }
我有一种情况 , 我只需要检索Parent类 。由于性能问题,我应该怎么做 才能运行HQL查询 以检索Parent类,而 只获取Parent类而不加载任何子类?
解决方法如下所述:
将您的Parent类定义为 MappedSuperClass 。假设父类映射到PARENT_TABLE
Parent
PARENT_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 }
对于每个子类,扩展AbstractParent该类并定义其 SecondaryTable 。父类中定义的任何持久字段都将映射到_SecondaryTable_ 定义的表。最后,如果需要,请使用AttributeOverrides
AbstractParent
@Entity @SecondaryTable("PARENT_TABLE") public class Child extends AbstractParent { private String childField; public String getChildProperty() { return childField; } }
并定义另一个实体,以仅检索父类
@Entity @Table(name="PARENT_TABLE") @AttributeOverrides({ @AttributeOverride(name="someProperty", column=@Column(name="someProperty")) }) public class Parent extends AbstractParent {}
没有其他的。如上所示,我仅使用了JPA特定的批注