Home > Enterprise >  How do I use multiple WHERE clause in parameterized SQL query?
How do I use multiple WHERE clause in parameterized SQL query?

Time:01-12

I have a repository where I want current month records alone to display for the passed User object parameter . 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]

CodePudding user response:

In sql JOIN clause is before WHERE clause. Also joins work with keyword ON, not where.

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())

CodePudding user response:

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);
  •  Tags:  
  • Related