我有一个包含 OneToMany 关系的实体,具有急切的获取,以及第二个实体。这第二个实体有两个 OneToOne 关系,也急切地获取到第三和第四类。OneToOne 关系是单向的。
我从 DOM4J 会话中调用 createQuery(),以“从实体”作为 HQL 发送。在返回中,我得到了第二个实体,但它只包含第三个和第四个实体的 ID,而不是完整的内容。在我看来,那些第三和第四实体似乎并没有被急切地获取。我无法准确重现代码,但这是最相关的部分。
@Entity
public class Event extends EventParent {
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="eventId")
@org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<Pair> pairs=new HashSet<MarPair>();
}
@Entity
public class Pair extends PairParent {
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Info info;
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@org.hibernate.annotations.Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Results results;
}
@Entity
public class Info {
private String name;
private Date time;
}
@Entity
public class Results {
private String name;
private Date time;
}
最后,这是我用于查询的代码:
public void retrieve() {
String hqlQry = "from Event";
Session session = dom4JSessionFactory.getCurrentSession();
Session dom4jSession = session.getSession(EntityMode.DOM4J);
List results = dom4jSession.createQUery(hqlQuery).list();
}
正如我所提到的,从这个查询中,我得到了 info 和 results 的值的整数,它是 info 和 results 表的键,而不是从 info 和 results 表中检索的实际数据。
相关信息:
- 春天 2.5.4
- 休眠 3.2.6
- 休眠注释 3.3.1.GA
- dom4JSessionFactory 的类型为 org.springframework.orm.hibernate3.LocalSessionFactoryBean
- 实体“事件”实际上是类层次结构中的第 7 个类(不知道这是否重要)
我确实遗漏了很多信息,希望没有必要。如果还有其他事情您需要冒险猜测它为什么不起作用,请告诉我。