我有两个有一对多关系的课程: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();
答案 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
,会话将在访问时懒惰加载投票结果。