在orm.xml中的JPA命名查询中,如何将对象作为param传递并在JPQL中使用其属性

时间:2017-05-01 11:37:09

标签: java spring hibernate spring-data-jpa jpql

我使用的是Spring数据JPA。具体而言,JpaRepository包含findByXXX个查询。

场景是我有一个包含大量参数的查询。把它们全部放在一个功能中是丑陋和不切实际的。就像

findByALotOfParams(p1, p2, p3, p4, p5, p6, p7, p8, p9);

我想要实现的目标是:

class P {
    String p1;
    String p2;
    ...
    String p9;
}
findByALotOfParams(P p);
// and I can access the properties like :p.p1

在没有Spring数据jpa的hibernate中,有类似

的东西
Stock stock = new Stock();
stock.setStockCode("7277");
String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
    .setProperties(stock)
    .list();

使用SpEL support我可以通过类似

的方式实现这一点
@Query("select s from Stock s where s.stockCode = :#{#param.stockCode}")
Iterable<Stock> findByStockCode(@Param("param") Stock stock);

然而,问题是,当我在orm.xml中使用命名查询时,如

<named-query name="Stock.findByStockCode">
    <query>
        select s from Stock s where s.stockCode = :#{#param.stockCode}
    </query>
</named-query>

这不起作用,并给出以下错误

org.hibernate.QueryException: unexpected char: '#'

有什么想法吗?

0 个答案:

没有答案