查询与DetachedCriteria的多对多关系

时间:2013-08-20 15:45:06

标签: hibernate hibernate-mapping

现在我在数据库中有3个表:

Table A:
id:
...

Table B:
id:
...

Table C:
A_id:
B_id:
... 

映射对象如下:

@Entity
@Table(name="A")
Class A{
    Long id;

    @ManyToMany
    @Fetch(FetchMode.SELECT)
    @JoinTable(name="C",joinColumns={@JoinColumn(name="A_id")},inverseJoinColumns={@JoinColumn(name="B_id")})
    List<B> Bs;
}

@Entity
@Table(name="B")
Class B{
    Long id;
}

现在我想使用DetachedCriteria进行查询以查找A.Bs包含特定B的所有A实体。是否可以使用DetachedCriteria进行查询。

我认为sql应该是

Select A.* 
From A inner join C on A.id=C.A_id inner join B on B.id=C.B_id 
Where B.id=? 

非常感谢!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

在HQL中,它只是

select a from A a inner join a.bs b where b.id = :id

它直接转换为标准:

Criteria c = session.createCriteria(A.class, "a");
c.createAlias("a.bs", "b");
c.add(Restrictions.eq("b.id", bId);

与往常一样,指向the documentation explaining it

的链接