如何在Hibernate中使用setParameterList()方法?

时间:2013-01-12 17:59:03

标签: hibernate hql

我需要根据作为数组提供的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列表检索所选行的方法是什么?

2 个答案:

答案 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);

假设accountFilterList个对象。请记住,您不应该传递空列表,因为这会导致以下SQL(这将无效):... WHERE xyz IN () ...(请注意空的子句)。

答案 1 :(得分:4)

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

query.setParameter("accountIds", accountFilter);

而不是

query.setParameterList("accountIds", accountFilter);

在处理列表时使用setParameterList()