如果我的列表为空,则会出现以下错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')'
Run Code Online (Sandbox Code Playgroud)
下面是我的hibernate相关方法:
@Override
public List<SomeThing> findByIds(List<Integer> someIds) {
return sessionFactory.getCurrentSession().createCriteria(SomeClass.class)
.add(Restrictions.in("id", someIds))
.list();
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能防止这个错误?
我知道我可以将呼叫短路并返回一个空列表,如:
if(someIds == null || someIds.size() == 0) {
return new List<SomeThing>();
}
Run Code Online (Sandbox Code Playgroud)
但有没有更优雅的方式来做到这一点?
Mad*_*ddy 14
我想说Hibernate需要解决这个问题,并给出有意义的消息.
我认为它的提供者/ hibernate的责任是检查空/空List.
可以想象原因,它试图构造where子句,比如id in(),org.hibernate.loader.criteria.CriteriaQueryTranslator或类似的东西.但是因为这里List是空的,所以会抛出异常.但是他们已经创建了查询(并且由于异常/空List而无法完成.
Yog*_*ngh 13
没有.如果使用空参数for in子句执行查询,它将失败(您可以通过运行纯SQL来验证这一点).如果输入参数为null/empty,最好不要执行查询.
我唯一可以建议是使用isEmpty()功能,并!= null在if声明和小结构调整:
@Override
public List<SomeThing> findByIds(List<Integer> someIds) {
List<Something> result = null; //you may initialize with empty list
if(someIds != null || !someIds.isEmpty() {
result = sessionFactory.getCurrentSession().createCriteria(SomeClass.class)
.add(Restrictions.in("id", someIds))
.list();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13116 次 |
| 最近记录: |