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

Tin*_*iny 9 hibernate hql

我需要根据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 () ...注意空的子句).

  • 最后一个查询应该是`query.setParameterList("accountIds",accountFilter);`,不是吗? (6认同)

小智 5

大多数人在这里提出的问题是他们还想使用,

query.setParameter("accountIds", accountFilter);
Run Code Online (Sandbox Code Playgroud)

代替

query.setParameterList("accountIds", accountFilter);
Run Code Online (Sandbox Code Playgroud)

使用setParameterList()与列表打交道时