Java 什么时候条件比HQL或nativeSQL查询更好?
在我的例子中,在获得某个列表后,我需要迭代该列表以设置POJO类的一些其他字段Java 什么时候条件比HQL或nativeSQL查询更好?,java,hibernate,Java,Hibernate,在我的例子中,在获得某个列表后,我需要迭代该列表以设置POJO类的一些其他字段 if (transportHeaderList.get(i) instanceof TransportHeaderIiss){ transHeadIiss=(TransportHeaderIiss)transportHeaderList.get(i); customerVendor= tOManagementDAO.getVendorCode(transHeadIiss.getCustVendU
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堆空间错误”。如果可以让我知道,为什么在使用条件时抛出此错误。?再次感谢