maa*_*nus 6 java hibernate criteria
怎么了?
session.createCriteria(Composed.class, "main")
.createAlias("main.id.branch", "b1")
.add(Restrictions.eq("b1.owner", user))
.list();
Run Code Online (Sandbox Code Playgroud)
?相应的HQL工作正常
String hql = "select main from Composed as main"
+ "left join main.id.branch as b1 where b1.owner = ?";
session.createQuery(hql)
.setInteger(0, user.id().intValue())
.list();
Run Code Online (Sandbox Code Playgroud)
从Criteria开始,Hibernate没有创建任何连接和使用where b1x1_.owner_id=?,但是没有b1x1_任何地方,所以它失败了"无法准备语句".
这些课程相当简单
@Entity class Composed {
@Id ComposedId id; // also tried @EmbeddedId
... irrelevant stuff
}
@Embeddable class ComposedId {
@ManyToOne(optional=false) Branch branch;
... irrelevant stuff
}
@Entity class Branch {
@Id Integer id;
@ManyToOne(optional=false) User owner;
... irrelevant stuff
}
@Entity class User {
@Id Integer id;
... irrelevant stuff
}
Run Code Online (Sandbox Code Playgroud)
我没有尝试,但也许用左连接创建两个别名可以帮助您。我的意思是:
session.createCriteria(Composed.class, "main")
.createAlias("main.id", "id1", JoinType.LEFT_OUTER_JOIN)
.createAlias("id1.branch", "b1", JoinType.LEFT_OUTER_JOIN)
.add(Restrictions.eq("b1.owner", user))
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
3622 次 |
| 最近记录: |