Java Hibernate criteria.list()返回重复项
我知道这种问题已经被问了几千次了,但我想我有一个不同的问题。因此,我有一个类a,它有一个类B的对象集合和这个集合的一个getter:Java Hibernate criteria.list()返回重复项,java,hibernate,Java,Hibernate,我知道这种问题已经被问了几千次了,但我想我有一个不同的问题。因此,我有一个类a,它有一个类B的对象集合和这个集合的一个getter: public class A { private String Id; private ArrayList<B> bees; public ArrayList<B> getBees(){ ArrayList<Criterion> criterions = new ArrayList&
public class A {
private String Id;
private ArrayList<B> bees;
public ArrayList<B> getBees(){
ArrayList<Criterion> criterions = new ArrayList<>();
criterions.add(Restrictions.eq("classAId", this.Id));
return (ArrayList<B>)DatabaseHelper.getObjectByCriteria(criterions, B.class);
}
}
和DatabaseHelper.getObjectByCriteria代码:
public static List getObjectByCriteria(ArrayList<Criterion> cr, Class classType){
List result = new ArrayList();
Session session = MyHibernateUtil.getSessionFactory().openSession();
Criteria criteria = session.createCriteria(classType);
if (cr != null){
for (Criterion criterion : cr){
criteria.add(criterion);
}
}
result = criteria.list();
if (session.isOpen()){
session.close();
}
return result;
}
当我在MySQLWorkbench中运行这个查询时,从表_b中选择*,其中id=123,我得到两个具有不同值的不同行。
但是,DatabaseHelper.getObjectByCriteria返回的结果列表包含两个具有相同ID和值的标识对象
我不使用任何类型的hibernate注释
我已将show_sql属性设置为true,并检查了hibernate正在运行的实际查询及其ok查看查询select*from table_b,其中id=123,似乎id是table_b中的主键。是这样吗?。顺便说一句,criterions.addRestrictions.eqId,this.Id;您使用的是这个.Id,我怀疑您使用的是ClassA而不是ClassB的Id。不确定这是不是你想要的?您在代码中使用的.Id的值是什么?正如您所说的,Id是表B中的主键。是的,我使用的是类A的Id,因为我在类B中有一个字段classAId。根据您的标记进行编辑。它不应该是criterions.addRestrictions.eqclassAId,this.Id;。另外,如果id是表B中的主键,那么为什么表B中的记录具有相同的主键?那么,在标准中将其改为classAId有帮助吗?我假设classAId映射到表B的id列?我回答了我的问题。我必须输入具有相同PK的条目,因为它不是该表中的唯一PK,我假设B.class中的classAId映射到表_B的id列?