2017-08-01 13 views
1

こんにちは私は次のエラーが発生しています。方法findLastHistoric(HistoricalIndexRepositoryImpl.java:37)Spring Hibernate Jpaエラー:根本原因java.lang.IllegalArgumentException:不明なパラメータの位置:1

クラス内部

java.lang.IllegalArgumentException: Unknown parameter position: 1] with root cause java.lang.IllegalArgumentException: Unknown parameter position: 1 at org.hibernate.query.internal.QueryParameterBindingsImpl.getBinding(QueryParameterBindingsImpl.java:240) at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:503) at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:104) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:372) at com.sun.proxy.$Proxy63.setParameter(Unknown Source) at edu.zipcloud.cloudstreetmarket.core.daos.HistoricalIndexRepositoryImpl.findLastHistoric(HistoricalIndexRepositoryImpl.java:37) at edu.zipcloud.cloudstreetmarket.core.daos.HistoricalIndexRepositoryImpl.findLastIntraDay(HistoricalIndexRepositoryImpl.java:31) at edu.zipcloud.cloudstreetmarket.core.services.MarketServiceImpl.getLastDayIndexActivity(MarketServiceImpl.java:41) at edu.zipcloud.cloudstreetmarket.portal.controllers.DefaultController.fallBack(DefaultController.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

@Repository 
public class HistoricalIndexRepositoryImpl implements HistoricalIndexRepository{ 

    @PersistenceContext 
    private EntityManager em; 

    @Override 
    public Iterable<HistoricalIndex> findIntraDay(String code, Date of) { 
     TypedQuery<HistoricalIndex> sqlQuery = em.createQuery("from HistoricalIndex h where h.index.code = ? and h.fromDate >= ? and h.toDate <= ? ORDER BY h.toDate asc", HistoricalIndex.class); 
     sqlQuery.setParameter(1, code); 
     sqlQuery.setParameter(2, DateUtil.getStartOfDay(of)); 
     sqlQuery.setParameter(3, DateUtil.getEndOfDay(of)); 
     return sqlQuery.getResultList(); 
    } 

    @Override 
    public Iterable<HistoricalIndex> findLastIntraDay(String code) { 
     return findIntraDay(code, findLastHistoric(code).getToDate()); 
    } 

    @Override 
    public HistoricalIndex findLastHistoric(String code){ 
     TypedQuery<HistoricalIndex> sqlQuery = em.createQuery("from HistoricalIndex h where h.index.code = ? ORDER BY h.toDate desc", HistoricalIndex.class); 
     sqlQuery.setParameter(1, code); 
     return sqlQuery.setMaxResults(1).getSingleResult(); 
    } 
} 

私はこのエラーを解決するのに役立ちます。他の情報が必要な場合は、私に教えてください。

よろしくお願いいたします。

+0

あなたはHQLを使用していますか? h.index.code =:コードORDER BY h.toDate desc' を使用し、パラメータを設定しているときは、 'sqlQuery.setParameter(" code "、code);' – zombie

+0

yes Sir @ゾンビ – user7036414

+0

ああああ。クエリから "SELECT {別名}"を忘れてしまったようです。また、JPAでは、JDBC構文ではなく、POSITIONAL PARAMETERS(またはNAMED PARAMETERS)を使用します。基本的なJPAドキュメントを読む –

答えて

3

これはいかがですか?

TypedQuery<HistoricalIndex> sqlQuery = em.createQuery("from HistoricalIndex h where h.index.code = ?1 ORDER BY h.toDate desc", HistoricalIndex.class); 

チェックhereセクション5.3.2。クエリの作成