Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 什么时候条件比HQL或nativeSQL查询更好?_Java_Hibernate - Fatal编程技术网

Java 什么时候条件比HQL或nativeSQL查询更好?

Java 什么时候条件比HQL或nativeSQL查询更好?,java,hibernate,Java,Hibernate,在我的例子中,在获得某个列表后,我需要迭代该列表以设置POJO类的一些其他字段 if (transportHeaderList.get(i) instanceof TransportHeaderIiss){ transHeadIiss=(TransportHeaderIiss)transportHeaderList.get(i); customerVendor= tOManagementDAO.getVendorCode(transHeadIiss.getCustVendU

在我的例子中,在获得某个列表后,我需要迭代该列表以设置POJO类的一些其他字段

 if (transportHeaderList.get(i) instanceof TransportHeaderIiss){
     transHeadIiss=(TransportHeaderIiss)transportHeaderList.get(i);
     customerVendor= tOManagementDAO.getVendorCode(transHeadIiss.getCustVendUid());
 }
 if(customerVendor!=null){
     transHeadIiss.setVendorCode(customerVendor.getCustVendCode());
 }
上述代码调用
getVendorCode
方法从数据库中获取
custVendorCode
值。
getVendorCode
的代码如下

public CustomerVendorIiss getVendorCode(Long custVendUid) {
    List list=new ArrayList();
    /* Criteria criteria = sessionFactory.getCurrentSession().createCriteria(CustomerVendorIiss.class);

     criteria.add(Restrictions.eq("companyCode",user.getDefaultCompany().getCompanyCode()));
     if(custVendUid!=null && custVendUid.intValue()>0)
     {
         criteria.add(Restrictions.eq("custVendUid",custVendUid));

     }
     list=criteria.list();*/
     UsersIiss user= ApplicationContextProvider.getLoggedInUser();
     String sqlQuery="select custVendCode as custVendCode from CustomerVendorIiss where companyCode ='"+ user.getDefaultCompany().getCompanyCode() +"' and custVendUid= "+custVendUid;
     Query query = sessionFactory.getCurrentSession().createQuery(sqlQuery);
     query.setResultTransformer(Transformers.aliasToBean(CustomerVendorIiss.class));
     list=query.list();
        if(list.size()>0){
        return (CustomerVendorIiss)list.get(0);
        }else{
        return null;
        }
}
当我使用条件执行上述代码时,从表中获取值并将其设置为POJO类花费了很多时间,有时我会得到
java.lang.OutOfMemoryError:java堆空间
error。我想这是因为我没有取消分配criteria对象

当我使用
createQuery()
方法执行上述代码时,我没有遇到这个问题,所有获取和设置过程都更快

我想知道我做错了什么? 知道标准如何以及何时更好或HQL更好会很好


谢谢

实际上,这些查询是不同的。第二个有一个额外的限制

companyCode ='"+ user.getDefaultCompany().getCompanyCode() +"'
因此,请尝试在标准中添加相同的内容

criteria.add(Restrictions.eq("companyCode",user.getDefaultCompany().getCompanyCode()));
同样,通过这种方式连接字符串来获取查询也不是上帝。SQL注入是可能的。改用参数


标准和HQL在一种情况下比SQL好-您需要独立于数据库的逻辑在必要时交换数据库,而无需重写代码。

L。。感谢您的回复:)如何将相同的限制companyCode='“+user.getDefaultCompany().getCompanyCode()+””添加到条件。。我认为criteria.add(restriction())是向criteria添加限制的唯一方法。当我使用条件时,我得到一个错误“java.lang.OutOfMemoryError:java堆空间错误”。如果可以让我知道,为什么在使用条件时抛出此错误。?再次感谢