没有懒惰地初始化一个角色集合

时间:2014-05-23 12:48:33

标签: java hibernate lazy-loading

我有两个有一对多关系的课程:OpinionPoll(一)和PollResult(很多)。

当我执行下面的条件查询时,会引发以下错误: 无法延迟初始化角色集合:com.bonrix.gcm.demo.model.OpinionPoll.pollResults,无法初始化代理 - 无会话。

我只想查询父(OpinionPoll类)记录。但我得到了上述错误,由于我的要求,我必须使用FetchType = Lazy。

以下是我的两个班级的映射:

Opinionpoll mapping:

@OneToMany(cascade=CascadeType.ALL,mappedBy="opinionPoll",fetch=FetchType. LAZY)
private List<PollResult> pollResults = new ArrayList<PollResult>() ;


PollResult mapping:

@ManyToOne(cascade = { CascadeType.ALL },fetch=FetchType.LAZY)
@JoinColumn(name = "poll_id")           
private OpinionPoll opinionPoll;


Query:

Criteria criteria = 
  session.createCriteria(OpinionPoll.class)
    .add(Restrictions.eq("clientName", username))
    .addOrder(Order.desc("pollId"))
    .setMaxResults(maxpoll)
    .setFirstResult(offset);
opinionPolls = criteria.list();

1 个答案:

答案 0 :(得分:0)

你正在尝试像

这样的东西
40 : using(var session = factory.OpenSession())
41 : {
42 :        // load object in your case `OpinionPoll`
43 : }

// access collection on object , in your case `PollResult`

44 : var firstResult =     OpinionPoll.PollResults.First()

您需要在会话关闭之前(第43行之前)访问PollResults,会话将在访问时懒惰加载投票结果。