我需要使用hibernate标准在DAO中进行查询,但我不确定如何。
我有2个实体,A和B,以及一个包含A和B ID的关联表。 一个人不知道B,B不知道A.
我希望使用标准找到与某个B相关联的所有A。
我做了一个图表,希望它有助于解释。
如您所见,表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上的映射会创建关联表。
提前致谢。
答案 0 :(得分: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"));
我希望此代码可以帮助您解决问题。