我需要根据作为数组提供的ids
从Oracle数据库中获取选定的行,类似于SELECT ... FROM table_name WHERE id IN()
查询。
在我尝试这样做的过程中,我尝试在DAO中使用org.hibernate.setParameterList(String name, Object[] values)
方法,如下所示。
@Service
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW)
public final class ProductImageDAO implements ProductImageService {
@SuppressWarnings("unchecked")
public List<Object[]> getFileName(String[] list) {
return sessionFactory
.getCurrentSession()
.createQuery("SELECT prodImageId, prodImage FROM ProductImage WHERE prodImageId=:list")
.setParameterList("list", list).list();
}
}
给定方法中类型String[]
的参数由相应的Spring控制器类提供。
它会导致抛出以下异常。
org.hibernate.hql.ast.QuerySyntaxException:意外令牌:,附近 第1行,第78列[select prodImageId,prodImage from model.ProductImage,其中prodImageId =:id0_,:id1_,:id2_,:id3_, :id4_,:id5 _]
使用Hibernate基于ids
列表检索所选行的方法是什么?
答案 0 :(得分:21)
String queryString = "select acc from cgix.trust.domain.PtbnAccount as acc where acc.accountId IN (:accountdIds)";
Query query = session.createQuery (queryString);
query.setParameterList("accountIds", accountFilter);
假设accountFilter
是List
个对象。请记住,您不应该传递空列表,因为这会导致以下SQL(这将无效):... WHERE xyz IN () ...
(请注意空的子句)。
答案 1 :(得分:4)
大多数人在这里遇到的问题是他们仍然想要使用,
query.setParameter("accountIds", accountFilter);
而不是
query.setParameterList("accountIds", accountFilter);
在处理列表时使用setParameterList()