Hibernate标准有2个实体表和1个关联表

时间:2013-06-29 17:05:41

标签: java hibernate criteria

我需要使用hibernate标准在DAO中进行查询,但我不确定如何。

我有2个实体,A和B,以及一个包含A和B ID的关联表。 一个人不知道B,B不知道A.

我希望使用标准找到与某个B相关联的所有A。

我做了一个图表,希望它有助于解释。

Example image enter image description here

如您所见,表A有3条记录,表B也有3条记录,表AB也有3条记录。我想找到在AssocAB中与B1相关的所有A。查询应返回A1和A3。

有可能吗?

这是类,以及注释的关系。

实体A:没有注释

实体B:拥有一组实体A

@ManyToMany
@JoinTable(name = "Assoc_AB", joinColumns = { @JoinColumn(name = "ID_B")},  inverseJoinColumn = { @JoinColumn(name = "ID_A")})
@ForeignKey(name = "FK_A_B", inverseName = "FK_B_A")
public set<A> getA(){
    return this.listOfA;
}

没有关联类的类,B上的映射会创建关联表。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我尝试用您的指示编写条件查询,但这并不容易,因为您告诉AB表格有int ID,但是您放了Strings您的行("A1""B1" ...)。我认为你的idString而不是int。你应该有这样的东西:

List<A> listOfA = new ArrayList<A>();
Criteria criteria = session.createCriteria(B.class, "b");
criteria.add(Restrictions.eq("b.id", "B1"));
List<B> listOfBs = criteria.list();
for (B b : listOfBs) {
    listOfA.addAll(b.getA());
}

如果name课程中有B属性,则必须修改限制:

criteria.add(Restrictions.eq("b.name", "B1"));

我希望此代码可以帮助您解决问题。