9

我需要根据ids作为数组提供的 Oracle 数据库中的选定行,例如SELECT ... FROM table_name WHERE id IN()查询。

在我尝试这样做时,我试图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();
    }
}

String[]给定方法中的类型参数由各自的 Spring 控制器类提供。

它会导致引发以下异常。

org.hibernate.hql.ast.QuerySyntaxException:意外令牌:,靠近第 1 行,第 78 列 [select prodImageId, prodImage from model.ProductImage where prodImageId=:id0_, :id1_, :id2_, :id3_, :id4_, :id5_]

ids根据使用 Hibernate的列表检索所选行的方法是什么?

4

2 回答 2

23
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 () ...注意空的子句)。

于 2013-01-12T18:15:04.677 回答
6

大多数人在这里遇到的问题是他们仍然想使用,

query.setParameter("accountIds", accountFilter);

代替

query.setParameterList("accountIds", accountFilter);

setParameterList()处理列表时使用

于 2015-05-25T11:47:00.127 回答