Java Hibernate获取配置文件不适用于嵌套级别的实体(三个级别)
我有四个实体,如开始、第一、第二、第三。Java Hibernate获取配置文件不适用于嵌套级别的实体(三个级别),java,mysql,hibernate,hibernate-criteria,Java,Mysql,Hibernate,Hibernate Criteria,我有四个实体,如开始、第一、第二、第三。 开始先有一对多(单向) 第一个具有一对多和第二个(单向) 第二个具有一对多和第三个(单向) 获取配置文件是在开始类中定义的。它将在运行时使用session.enableFetchProfile()方法启用 如果我获取开始实体,我希望获取所有实体。如何使用fetch配置文件概念完成此操作。目前它只能获取两个级别。 起始实体 @Entity @FetchProfiles({ @FetchProfile(name="
开始先有一对多(单向)
第一个具有一对多和第二个(单向)
第二个具有一对多和第三个(单向)
获取配置文件是在开始类中定义的。它将在运行时使用session.enableFetchProfile()方法启用
如果我获取开始实体,我希望获取所有实体。如何使用fetch配置文件概念完成此操作。目前它只能获取两个级别。 起始实体
@Entity
@FetchProfiles({
@FetchProfile(name="Start_First_Second_Third_FP",fetchOverrides={
@FetchOverride(entity=Start.class,association="list_first",mode=FetchMode.JOIN),
@FetchOverride(entity=First.class,association="list_second",mode=FetchMode.JOIN),
@FetchOverride(entity=Second.class,association="list_third",mode=FetchMode.JOIN)
})
})
public class Start {
@Id
@GeneratedValue
private int start_id;
private String name;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="start_id")
private Set<First> list_first = new HashSet<First>();
// Getter and Setter here
}
Session session = this.sessionFactory.getCurrentSession();
Transaction td = session.beginTransaction();
session.enableFetchProfile("Start_First_Second_Third_FP"); // Enabled Fetch Profile
System.out.println("Session Fetch Profile is "+session.isFetchProfileEnabled("Start_First_Second_Third_FP")); // It prints True
List<Object> objects = session.createCriteria(Start.class).list();
检索起始实体
@Entity
@FetchProfiles({
@FetchProfile(name="Start_First_Second_Third_FP",fetchOverrides={
@FetchOverride(entity=Start.class,association="list_first",mode=FetchMode.JOIN),
@FetchOverride(entity=First.class,association="list_second",mode=FetchMode.JOIN),
@FetchOverride(entity=Second.class,association="list_third",mode=FetchMode.JOIN)
})
})
public class Start {
@Id
@GeneratedValue
private int start_id;
private String name;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="start_id")
private Set<First> list_first = new HashSet<First>();
// Getter and Setter here
}
Session session = this.sessionFactory.getCurrentSession();
Transaction td = session.beginTransaction();
session.enableFetchProfile("Start_First_Second_Third_FP"); // Enabled Fetch Profile
System.out.println("Session Fetch Profile is "+session.isFetchProfileEnabled("Start_First_Second_Third_FP")); // It prints True
List<Object> objects = session.createCriteria(Start.class).list();
在这里,我启用了所有FetchProfiles,但hibernate查询只有三个这样的表开始-->第一-->第二次
但是我想要四张桌子 开始-->第一-->第二-->第三
请提供解决方案,我有紧急情况
Session session = this.sessionFactory.getCurrentSession();
Transaction td = session.beginTransaction();
session.enableFetchProfile("Start_First_Second_Third_FP"); // Enabled Fetch Profile
System.out.println("Session Fetch Profile is "+session.isFetchProfileEnabled("Start_First_Second_Third_FP")); // It prints True
List<Object> objects = session.createCriteria(Start.class).list();
select
this_.start_id as start_id1_31_2_,
this_.name as name2_31_2_,
list_first2_.start_id as start_id3_2_4_,
list_first2_.first_id as first_id1_2_4_,
list_first2_.first_id as first_id1_2_0_,
list_first2_.name as name2_2_0_,
list_secon3_.first_id as first_id3_29_5_,
list_secon3_.second_id as second_i1_29_5_,
list_secon3_.second_id as second_i1_29_1_,
list_secon3_.name as name2_29_1_
from
Start this_
left outer join
First list_first2_
on this_.start_id=list_first2_.start_id
left outer join
Second list_secon3_
on list_first2_.first_id=list_secon3_.first_id