简体   繁体   English

如何在参数化 SQL 查询中使用多个 WHERE 子句?

[英]How do I use multiple WHERE clause in parameterized SQL query?

I have a repository where I want current month records alone to display for the passed User object parameter.我有一个存储库,我希望仅显示当前月份记录以显示传递的用户 object 参数。 This is the query that I have but it is not compiling.这是我的查询,但它没有编译。

Repository存储库

@Query("select sum(investment.principal) from Investment investment where MONTH(investment.startDate) = MONTH(CURDATE()) "
            + "AND YEAR(investment.startDate) = YEAR(CURDATE()) join investment.customer_id.marketer marketer where marketer = :marketer ")
    BigDecimal getMarketerMonthlyInflow(User marketer);

This is the compilation error I am getting这是我得到的编译错误

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: join near line 1, column 188 [select sum(investment.principal) from com.bethsaida.org.models.Investment investment where MONTH(investment.startDate) = MONTH(CURDATE()) AND YEAR(investment.startDate) = YEAR(CURDATE()) join investment.customer_id.marketer where markter = :marketer ]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.2.1.Final.jar:5.2.1.Final]
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91) ~[hibernate-core-5.2.1.Final.jar:5.2.1.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:288) ~[hibernate-core-5.2.1.Final.jar:5.2.1.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187) ~[hibernate-core-5.2.1.Final.jar:5.2.1.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142) ~[hibernate-core-5.2.1.Final.jar:5.2.1.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) ~[hibernate-core-5.2.1.Final.jar:5.2.1.Final]

In sql JOIN clause is before WHERE clause.在 sql JOIN 子句位于 WHERE 子句之前。 Also joins work with keyword ON, not where.还与关键字 ON 一起工作,而不是在哪里。

I can't give you correct query without knowing table columns, use case, etc., but it should look something like that:在不知道表列、用例等的情况下,我无法为您提供正确的查询,但它应该看起来像这样:

SELECT SUM(investment.principal) 
FROM Investment investment 
JOIN investment.customer_id.marketer ON markter = :marketer
WHERE MONTH(investment.startDate) = MONTH(CURDATE()) 
AND YEAR(investment.startDate) = YEAR(CURDATE())

This fixed it:这修复了它:

     @Query("select sum(investment.principal) from Investment investment JOIN investment.customer_id.marketer "
            + "marketer ON marketer_id = :marketer WHERE MONTH(investment.startDate) = MONTH(CURDATE()) "
            + "AND YEAR(investment.startDate) = YEAR(CURDATE())")
    BigDecimal getMarketerMonthlyInflow(User marketer);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用多列与休眠SQL查询的参数化IN子句 - Parameterized IN clause using multiple columns with hibernate SQL query 如何在IN子句的参数化选择查询中传递逗号分隔的UUID - how to pass comma seperated UUID in parameterized select query where IN clause 如何在参数化测试中使用 @InjectMocks - How do I use @InjectMocks with a Parameterized test 如何在SQL中使用可选的WHERE子句? - How to use optional WHERE clause in the SQL? 如何使用本机 SQL 作为 Hibernate 中使用 Criteria API 进行的更大查询的片段(where 子句)? - How to use native SQL as a fragment (where clause) of a bigger query made with Criteria API in Hibernate? 如何在SQL查询的like子句中使用占位符? - How to use placeholders in like clause in SQL query? 如何使用where-in子句以编程方式包含多个列的PostgreSQL查询? - How to do a PostgreSQL query with where-in clause which contains multiple columns programmatically? SQL查询休眠子句,其中 - SQL Query Hibernate with clause where 如何在参数化构造函数中指定多个枚举? - How do I specify the multiple enums in the parameterized constructor? 如何使用带有可变参数构造函数的 JUnit 参数化运行器? - How do I use a JUnit Parameterized runner with a varargs constructor?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM