Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在orm.xml中的JPA命名查询中,如何将对象作为param传递并在JPQL中使用其属性_Java_Spring_Hibernate_Spring Data Jpa_Jpql - Fatal编程技术网

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

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); //

我使用的是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();
@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等价物以查看其是否有效?