我需要根据ids
提供的数组(如SELECT ... FROM table_name WHERE id IN()
查询)从Oracle数据库中获取所选行.
在我试图这样做时,我试图org.hibernate.setParameterList(String name, Object[] values)
在我的DAO中使用该方法如下.
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
String[]
给定方法中的类型参数由相应的Spring控制器类提供.
它会导致抛出以下异常.
org.hibernate.hql.ast.QuerySyntaxException:意外的令牌:,在第1行第78列附近[从model.ProductImage中选择prodImageId,prodImage,其中prodImageId =:id0_,:id1_,:id2_,:id3_,:id4_,:id5_]
根据ids
使用Hibernate的列表检索所选行的方法是什么?
小智 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);
Run Code Online (Sandbox Code Playgroud)
假设accountFilter
是一个List
对象.请记住,您不应该传递空列表,因为这会导致以下SQL(这将无法工作):( ... WHERE xyz IN () ...
注意空的子句).
小智 5
大多数人在这里提出的问题是他们还想使用,
query.setParameter("accountIds", accountFilter);
Run Code Online (Sandbox Code Playgroud)
代替
query.setParameterList("accountIds", accountFilter);
Run Code Online (Sandbox Code Playgroud)
使用setParameterList()
与列表打交道时
归档时间: |
|
查看次数: |
30531 次 |
最近记录: |