Java 在jpql查询select中传递参数
我有一个jpql查询在select子句中实例化一个java对象Java 在jpql查询select中传递参数,java,jpa,jakarta-ee,jpql,Java,Jpa,Jakarta Ee,Jpql,我有一个jpql查询在select子句中实例化一个java对象 public List<ChampEtatOT> getEtatOT(Date dateDebut, Date dateFin) { Query query = em.createQuery("SELECT NEW ChampEtatOT( ot.numero, uo.denominationFr, ot.etat, ot.dateDebutReelle , ot.dateFinReelle, :da
public List<ChampEtatOT> getEtatOT(Date dateDebut, Date dateFin) {
Query query = em.createQuery("SELECT NEW ChampEtatOT( ot.numero, uo.denominationFr, ot.etat, ot.dateDebutReelle , ot.dateFinReelle, :dateParam1, :dateParam2, :dateParam3) FROM ordre ot JOIN ot.unite uo")
.setParameter("dateParam1", dateDebut, TemporalType.DATE)
.setParameter("dateParam2", dateFin, TemporalType.DATE)
.setParameter("dateParam3", new Date("2015-01-01"), TemporalType.DATE);
return query.getResultList();
}
我认为不可能在构造函数中引用参数。 在您的例子中,它抛出一个nosuchMethodExection:这意味着,在您的
ChampEtatOT
类中没有具有当前签名的方法(5个参数,而不是8个参数)
您可以参考此答案=>
因此,尝试检索所有数据,然后制作一个过滤器方法来设置ResultList的
ChampEtatOT
类中的所有etatEntreeSortie
值我认为不可能引用构造函数中的参数。
在您的例子中,它抛出一个nosuchMethodExection:这意味着,在您的ChampEtatOT
类中没有具有当前签名的方法(5个参数,而不是8个参数)
您可以参考此答案=>
因此,尝试检索所有数据,然后创建一个筛选方法,以设置ResultList的
ChampEtatOT
类中的所有etatEntreeSortie
值,问题已解决,正如您建议的那样,无法在SELECT子句中传递参数,因此,我将所有结果检索到一个列表中,然后根据三个日期date1、date2、date3过滤结果
Query query = em.createQuery("SELECT NEW ChampEtatAteliers"
+ "( ot.numero, uo.denominationFr, ot.etat, ot.dateDebutReelle, ot.dateFinReelle) "
+ "FROM ordre ot JOIN ot.unite uo");
List<ChampEtatAteliers> champEtatAtelierses = query.getResultList();
for (ChampEtatAteliers champEtatAtelierse : champEtatAtelierses) {
if (champEtatAtelierse.getDateDebutReelle().compareTo(date1) >= 0 && champEtatAtelierse.getDateDebutReelle().compareTo(date2) <= 0) {
champEtatAtelierList2.add(new ChampEtatAteliers(champEtatAtelierse.getNumero(), champEtatAtelierse.getDenominationFr(), "Entree/Mois"));
}
if (champEtatAtelierse.getEtat().equals("OUV")) {
if (champEtatAtelierse.getDateDebutReelle().compareTo(date1) < 0) {
champEtatAtelierse.setEtatEntreeSortie("En instance début du mois");
} else {
if (champEtatAtelierse.getDateDebutReelle().compareTo(date2) <= 0) {
champEtatAtelierse.setEtatEntreeSortie("En instance fin du mois");
}
}
}
}
Query Query=em.createQuery(“选择新的champetataliers”
+(ot.numero,uo.PARENSIONFR,ot.etat,ot.DATEDEBUTRELLE,ot.DATEFINRELLE)
+“从命令或加入命令或联合命令”);
List champetatalierses=query.getResultList();
for(香槟酒香槟酒:香槟酒){
if(champetatalierse.getDateDebutReelle().compareTo(date1)>=0&&champetatalierse.getDateDebutReelle().compareTo(date2)问题解决了,正如您建议的那样,无法在SELECT子句中传递参数,因此我将所有结果检索到一个列表中,然后根据三个日期date1、date2、date3过滤结果
Query query = em.createQuery("SELECT NEW ChampEtatAteliers"
+ "( ot.numero, uo.denominationFr, ot.etat, ot.dateDebutReelle, ot.dateFinReelle) "
+ "FROM ordre ot JOIN ot.unite uo");
List<ChampEtatAteliers> champEtatAtelierses = query.getResultList();
for (ChampEtatAteliers champEtatAtelierse : champEtatAtelierses) {
if (champEtatAtelierse.getDateDebutReelle().compareTo(date1) >= 0 && champEtatAtelierse.getDateDebutReelle().compareTo(date2) <= 0) {
champEtatAtelierList2.add(new ChampEtatAteliers(champEtatAtelierse.getNumero(), champEtatAtelierse.getDenominationFr(), "Entree/Mois"));
}
if (champEtatAtelierse.getEtat().equals("OUV")) {
if (champEtatAtelierse.getDateDebutReelle().compareTo(date1) < 0) {
champEtatAtelierse.setEtatEntreeSortie("En instance début du mois");
} else {
if (champEtatAtelierse.getDateDebutReelle().compareTo(date2) <= 0) {
champEtatAtelierse.setEtatEntreeSortie("En instance fin du mois");
}
}
}
}
Query Query=em.createQuery(“选择新的champetataliers”
+(ot.numero,uo.PARENSIONFR,ot.etat,ot.DATEDEBUTRELLE,ot.DATEFINRELLE)
+“从命令或加入命令或联合命令”);
List champetatalierses=query.getResultList();
for(香槟酒香槟酒:香槟酒){
如果(champetatalierse.getDateDebutReelle().compareTo(date1)>=0&&champetatalierse.getDateDebutReelle().compareTo(date2)显然JPQL BNF
不允许将参数作为构造函数参数传递
constructor_expression ::= NEW constructor_name ( constructor_item {, constructor_item}* )
constructor_item ::= single_valued_path_expression | scalar_expression | aggregate_expression |
identification_variable
scalar_expression ::= simple_arithmetic_expression | string_primary | enum_primary |
datetime_primary | boolean_primary | case_expression | entity_type_expression
string_primary ::= state_field_path_expression | string_literal |
input_parameter | functions_returning_strings | aggregate_expression | case_expression
i、 标量表达式可以是字符串主表达式,也可以是输入参数。因此,您的JPA提供程序不符合JPA规范,您应该对此提出错误。显然JPQL BNF
允许将参数作为构造函数参数传递
constructor_expression ::= NEW constructor_name ( constructor_item {, constructor_item}* )
constructor_item ::= single_valued_path_expression | scalar_expression | aggregate_expression |
identification_variable
scalar_expression ::= simple_arithmetic_expression | string_primary | enum_primary |
datetime_primary | boolean_primary | case_expression | entity_type_expression
string_primary ::= state_field_path_expression | string_literal |
input_parameter | functions_returning_strings | aggregate_expression | case_expression
i、 e标量表达式可以是字符串主表达式,也可以是输入参数。因此,您的JPA提供程序不符合JPA规范,您应该对此提出一个错误。这实际上是错误的,如链接问题所述,如果您查看第一条注释。这是JPA提供程序中的错误。这实际上是错误的,如链接问题所述,如果您查看在第一条评论中。这是JPA提供程序中的一个错误。这实际上是错误的,正如链接问题所说的,如果你看第一条评论。这是JPA提供程序中的一个错误。你的“答案”这是一个简单的解决方法。有人创建过这样的错误报告吗?这实际上是错误的,正如链接的问题所说,如果你看第一条评论。这是JPA提供商中的一个错误。你的“答案”只是解决这个错误的方法。有人创建过这样的错误报告吗?