我使用的是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: '#'
有什么想法吗?