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