Java 在orm.xml中的JPA命名查询中,如何将对象作为param传递并在JPQL中使用其属性
我使用的是Spring数据JPA。具体来说,Java 在orm.xml中的JPA命名查询中,如何将对象作为param传递并在JPQL中使用其属性,java,spring,hibernate,spring-data-jpa,jpql,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); //
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();
@Query("select s from Stock s where s.stockCode = :#{#param.stockCode}")
Iterable<Stock> findByStockCode(@Param("param") Stock stock);
我可以通过这样的方式来实现
Stock stock = new Stock();
stock.setStockCode("7277");
String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
.setProperties(stock)
.list();
@Query("select s from Stock s where s.stockCode = :#{#param.stockCode}")
Iterable<Stock> findByStockCode(@Param("param") Stock stock);
有什么想法吗?那是因为JPA不支持Spring的SpEL语法。您是否尝试过HQL等价物以查看其是否有效?