Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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_Optimization_Polymorphic Associations - Fatal编程技术网

Java 如何优化hibernate多态查询以不加入所有子类

Java 如何优化hibernate多态查询以不加入所有子类,java,hibernate,optimization,polymorphic-associations,Java,Hibernate,Optimization,Polymorphic Associations,我正在尝试优化hibernate查询,并且面临hibernate使查询比我预期的更复杂的问题 我有一个基类WorkUnit和几个子类CheckEmployee、Meeting、HomeCareRequest和WorkUnitAssignment,它们指向WorkUnit 以下是课程的草图: @Entity @Table(name = "WORK_UNIT_ASSIGNMENT") public class WorkUnitAssignmentEntity { private WorkUn

我正在尝试优化hibernate查询,并且面临hibernate使查询比我预期的更复杂的问题

我有一个基类WorkUnit和几个子类CheckEmployee、Meeting、HomeCareRequestWorkUnitAssignment,它们指向WorkUnit

以下是课程的草图:

@Entity
@Table(name = "WORK_UNIT_ASSIGNMENT")
public class WorkUnitAssignmentEntity {
    private WorkUnitEntity workUnit;
    ...

    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @JoinColumn(name = "WORK_UNIT_A_WORK_UNIT_ID")
    public WorkUnitEntity getWorkUnit() {
        return workUnit;
    }
}

@Entity
@Table(name = "WORK_UNIT")
@Inheritance(strategy = InheritanceType.JOINED)
public class WorkUnitEntity  {
}

@Entity
@Table(name = "CHECK_EMPLOYEE")
@PrimaryKeyJoinColumn(name="CHECK_EMPLOYEE_ID")
public class CheckEmployee extends WorkUnitEntity {
}

@Entity
@Table(name = "MEETING")
@PrimaryKeyJoinColumn(name = "MEETING_ID")
public class MeetingEntity extends WorkUnitEntity {
}

@Entity
@Table(name = "HCIS_HC_REQUEST")
@PrimaryKeyJoinColumn(name = "HC_REQUEST_ID")
public class HomeCareRequestEntity extends WorkUnitEntity {
}
我只想用HomeCareRequest加载WorkUnitAssignment。 这是我的疑问:

DetachedCriteria criteria = DetachedCriteria.forClass(WorkUnitAssignmentEntity.class);
DetachedCriteria dc = criteria.createCriteria("workunit", "workunit");
dc.add(Restrictions.eq("workunit.class", HomeCareRequestEntity.class));
Hibernate生成这样的sql:

select ... from WORK_UNIT_ASSIGNMENT this_, WORK_UNIT joinworkun1_, 
           HC_REQUEST joinworkun1_1_, CHECK_EMPLOYEE joinworkun1_2_, 
           MEETING joinworkun1_3_
where this_.WORK_UNIT_A_WORK_UNIT_ID=joinworkun1_.WORK_UNIT_ID and 
joinworkun1_.WORK_UNIT_ID=joinworkun1_1_.HC_REQUEST_ID(+) and 
joinworkun1_.WORK_UNIT_ID=joinworkun1_2_.CHECK_EMPLOYEE_ID(+) and 
joinworkun1_.WORK_UNIT_ID=joinworkun1_3_.MEETING_ID(+) and 
case
when joinworkun1_1_.HC_REQUEST_ID is not null then 1
when joinworkun1_2_.CHECK_EMPLOYEE_ID is not null then 2
when joinworkun1_3_.MEETING_ID is not null then 3
when joinworkun1_.WORK_UNIT_ID is not null then 0
end=?
此查询必须额外加入到检查员工会议。 我的问题是如何配置hibernate以不进行这些连接

我试图将继承更改为singe表,并在子类中使用辅助表,但结果是一样的