1

@Query is returning error when I pass more than one object in the select query.

Error - Validation failed for query for method public abstract java.util.List

Pojo

 @Entity
@Table(name = "SUBJECT")
public class Subject {

    private long id;
    private Long fkCode;
    private Long fkData;
    private Date assignedDate;
    private Data data;
    private Code code;

    //setters getters  


    @OneToOne
    @JoinColumn(name="fkCode",insertable=false, updatable=false)
    public Code getCode() {
        return code;
    }

    @OneToOne
    @JoinColumn(name="fkData",insertable=false, updatable=false)
    public Data getData() {
        return data;
    }
    public Subject(long id, Long fkEquipment, Long fkCode,Date assignedDate, Long fkData,Data data,Code code) {
        super();
        this.id = id;
        this.fkCode = fkCode;
        this.fkData = fkData;
        this.assignedDate = assignedDate;
        this.data = data;
        this.code=code;
        }

In my repository

@Query(" select new Subject(id, fkCode, fkData, assignedDate, data, code)"
                + " from Subject a where trunc(a.assignedDate) = TO_DATE(?1, 'yyyy-mm-dd')  "
                + " order by a.id desc")
        List<Subject> findByAssignedDate(String assignedDate);

Here is the error

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.dei.repositories.SubjectRepository.findByAssignedDate(java.lang.String)! at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:92) at org.springframework.data.jpa.repository.query.SimpleJpaQuery.(SimpleJpaQuery.java:62) at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:72) at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromQueryAnnotation(JpaQueryFactory.java:53) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:141) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:209) at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:74) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.(RepositoryFactorySupport.java:416) at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:206) at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:251) at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:237) at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ... 66 common frames omitted Caused by: java.lang.NullPointerException: null at org.hibernate.internal.util.ReflectHelper.getConstructor(ReflectHelper.java:354) at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:186) at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:159) at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1109) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2328) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2194) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1476) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:573) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:131) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:93) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344) at com.sun.proxy.$Proxy75.createQuery(Unknown Source) at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:86) ... 79 common frames omitted

if I remove either code or data from the query it works..

@Query(" select new Subject(id, fkCode, fkData, assignedDate, data)" - working

@Query(" select new Subject(id, fkCode, fkData, assignedDate, code)" - working

@Query(" select new Subject(id, fkCode, fkData, assignedDate, data, code)" not working

not working together. Need you help/suggestions

rinuthomaz
  • 1,393
  • 2
  • 23
  • 38
  • 2
    `TO_DATE` is not a valid function in JPQL. Neither is `TRUNC`. Consult any basic JPQL documentation to see this – Neil Stockton Sep 13 '16 at 10:29
  • It is working fine with@Query(" select new Subject(id, fkCode, fkData, assignedDate, data)" + " from Subject a where trunc(a.assignedDate) = TO_DATE(?1, 'yyyy-mm-dd') " + " order by a.id desc") List findByAssignedDate(String assignedDate); – rinuthomaz Sep 13 '16 at 10:48
  • Are you sure there is a constructor with the signature in the query? Hibernate gets a NPE from `ReflectHelper.getConstructor()`, indicating that it **cannot find the `Subject` constructor you specified**! – Nikos Paraskevopoulos Sep 13 '16 at 13:06
  • Furthermore, `fkCode` and `fkData` look like that you're trying to model the key references for the `code` and `data` relationships that you have specified. This is completely redundant as JPA manages this for you. – Steve C Sep 13 '16 at 13:13
  • @SteveC, fkCode is the primary key in the Code table. Is there any change I should make? – rinuthomaz Sep 13 '16 at 13:57

0 Answers0