0

我需要使用休眠条件在 DAO 中进行查询,但我不确定如何。

我有 2 个实体 A 和 B,以及一个包含 A 和 B ID 的关联表。A不认识B,B也不认识A。

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

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

示例图片 在此处输入图像描述

如您所见,表 A 有 3 条记录,表 B 也有 3 条记录,表 AssocAB 也有 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 上的映射创建关联表。

提前致谢。

4

1 回答 1

0

我试图用你的指示编写一个条件查询,但这并不容易,因为你告诉它A并且B表有一个int ID,但是你把Strings你的行("A1""B1"...)。我以为你id是一个String而不是一个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"));

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

于 2013-06-29T19:04:03.060 回答