Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate criteria.list()返回重复项_Java_Hibernate - Fatal编程技术网

Java Hibernate criteria.list()返回重复项

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&

我知道这种问题已经被问了几千次了,但我想我有一个不同的问题。因此,我有一个类a,它有一个类B的对象集合和这个集合的一个getter:

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列?