Java 在Hibernate继承中使用联接策略查询超类时如何避免联接子类
共有3类:Java 在Hibernate继承中使用联接策略查询超类时如何避免联接子类,java,hibernate,inheritance,Java,Hibernate,Inheritance,共有3类: @Entity @Inheritance(strategy = InheritanceType.JOINED) public class Animal extends BaseEntity { String eye; public String getEye() { return eye; } public void setEye(String eye) {
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Animal extends BaseEntity {
String eye;
public String getEye() {
return eye;
}
public void setEye(String eye) {
this.eye = eye;
}
}
@Entity
public class Cat extends Animal {
String catName;
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
}
@Entity
public class Dog extends Animal {
String dogName;
public String getDogName() {
return dogName;
}
public void setDogName(String dogName) {
this.dogName = dogName;
}
}
查询动物时,Hibernate生成如下SQL:
SELECT
animal0_.id AS id1_7_0_,
animal0_.eye AS eye2_7_0_,
animal0_1_.catName AS catName1_8_0_,
animal0_2_.dogName AS dogName1_9_0_,
CASE
WHEN animal0_1_.id IS NOT NULL
THEN 1
WHEN animal0_2_.id IS NOT NULL
THEN 2
WHEN animal0_.id IS NOT NULL
THEN 0
END AS clazz_0_
FROM
Animal animal0_
LEFT OUTER JOIN Cat animal0_1_
ON animal0_.id = animal0_1_.id
LEFT OUTER JOIN Dog animal0_2_
ON animal0_.id = animal0_2_.id
WHERE animal0_.id = ?
就像上面说的
所以,问题是:在查询超类时如何避免加入子类?通常,只需要超类中的属性——忽略它的子类
(想象动物有很多子类,如鸟、猪、鱼、昆虫……在这种情况下,动物查询将出现性能问题。)只选择所需的属性,而不是选择整个实体。