Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 在jpql查询select中传递参数_Java_Jpa_Jakarta Ee_Jpql - Fatal编程技术网

Java 在jpql查询select中传递参数

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

我有一个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, :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提供商中的一个错误。你的“答案”只是解决这个错误的方法。有人创建过这样的错误报告吗?