2013-02-20 36 views
0

我无法获取作为条件表达式结果的相关实体对象列表。我有两个具有多对多关系的对象,例如ObjectA < - > ObjectB,其中ObjectA的单个实例可以绑定到ObjectB的多个实例,而ObjectB的实例可能绑定到ObjectA的多个实例。这种关系存储在典型的连接表中,但出于遗留原因,对象模型是这样的,即ObjectB不直接了解它与ObjectA的关系。我试图创建一个条件表达式来获取所有通过连接表对象,具有与任何对象A的实例对象B的以下内容:从与休眠条件的关系项目实体

getDetachedCriteria(ObjectAObjectB.class) 
.setFetchMode("objectB", FetchMode.JOIN) 
.setProjection(Projections.property("objectB")); 

但是预期这不起作用,因为它出现Projection API只支持投影标量属性而不支持实体对象。是否可以通过Projections或其他Criteria API指定这种类型的选择?

+0

纠正我,如果我错了,但你的映射是ObjectA N <--> 1 ObjectB所以你应该使用ManyToOne? – overmeulen 2013-02-20 09:19:56

+0

@overmeulen对不起,我误解了这个问题,我更新了我的帖子以纠正一些错误。这种关系实际上是多对多的,但是查询是基于连接表的。 – Clayton 2013-02-21 01:09:26

+0

你能告诉我们你的映射吗?你不能让ObjectB使用双向映射意识到它与ObjectA的关系吗?它不会改变你的数据库模式,它会让事情变得更容易! – overmeulen 2013-02-21 09:47:20

回答

2

你不能用Hibernate Criteria API做到这一点。它可能在HQL或JPA2 Criteria API中,但不能使用Hibernate Criteria API。

+0

感谢您的回应。我担心这是事实。 – Clayton 2013-02-22 01:42:12

+0

@JB Nizet,我们如何通过HQL来实现? – Victor 2014-06-06 16:38:21

+1

@Victor:从ObjectA对象中选择不同的objectB加入objectA.collectionOfBs objectB其中... – 2014-06-06 17:59:23