Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate继承中使用联接策略查询超类时如何避免联接子类_Java_Hibernate_Inheritance - Fatal编程技术网

Java 在Hibernate继承中使用联接策略查询超类时如何避免联接子类

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) {

共有3类:

 @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 = ?
就像上面说的

所以,问题是:在查询超类时如何避免加入子类?
通常,只需要超类中的属性——忽略它的子类


(想象动物有很多子类,如鸟、猪、鱼、昆虫……在这种情况下,动物查询将出现性能问题。)

只选择所需的属性,而不是选择整个实体。