0

我有一个包含 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 个类(不知道这是否重要)

我确实遗漏了很多信息,希望没有必要。如果还有其他事情您需要冒险猜测它为什么不起作用,请告诉我。

4

1 回答 1

0

原来这是我们使用的 Hibernate 版本的一个错误。我必须做的是在 Hibernate 生成 HBM 文件后将 embed-xml 更改为 true。这是使用“替换”蚂蚁功能完成的。

于 2011-06-28T15:32:16.367 回答