2013-05-23 2 views
1

내 코드를 실행하려고 할 때 안녕하세요 나는 예외가 있습니다 는 또한 알려주세요 내 쿼리 또는 어쩌면 사용하는 매개 변수를 전달하는 방법을예상 위치 매개 변수의 수 : 2, 실제 매개 변수 :

내 DAO :

@Override 
    public Institution findWIthTwoParam(String name, Date mydate) {   
     return (Institution)sessionFactory.getCurrentSession().createQuery(
     "select i from Institution i where i.nameOfInstitution =? and i.creationDate=?") 
     .setString(0, name) 
     .setParameter(1, mydate).uniqueResult(); 

    } 

예외 내 스택 :

Exception in thread "main" org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [MyIstitution, Tue Apr 27 00:00:00 EST 17] [select i from Institution i where i.nameOfInstitution =? and i.creationDate=?] 
    at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:366) 
    at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:322) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:98) 
    at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:890) 
    at edu.demidov.dao.InsertDataService.findWIthTwoParam(InsertDataService.java:106) 
    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.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at $Proxy25.findWIthTwoParam(Unknown Source) 
    at edu.demidov.dao.AppTEst.main(AppTEst.java:76) 

내 엔티티 :

01 23,

내 개체 두 :

@Entity 
@Table(name="CREATION_DATE") 
public class CreationDate implements Serializable { 


    private static final long serialVersionUID = 1648102358397071136L; 

       @Id 
     @GeneratedValue(strategy=IDENTITY) 
     @Column(name="DATE_ID") 
    private int dateId; 


     @Column(name="PARTICULAR_DATE") 
    private Date particularDate; 


      @Version 
     @Column(name="VERSION") 
    private int version; 


     @Temporal(TemporalType.DATE) 
     @Column(name="CHILD_GO_SCHOOL_DATE") 
    private Date childGoSchoolDate; 


     @Temporal(TemporalType.DATE) 
     @Column(name="CHILD_ADMISSION_DATE") 
    private Date childAdmissionDate; 


     @ManyToMany(fetch = FetchType.LAZY) 
     @Cascade(org.hibernate.annotations.CascadeType.ALL) 
     @JoinTable(name="CREATIONDATE_INSTITUTION", 
            [email protected](name="DATE_ID"), 
            [email protected](name="INSTITUTION_ID")) 
    private Set<Institution> institution = new HashSet<Institution>(); 


         @OneToMany(fetch=FetchType.EAGER, orphanRemoval=true) 
     @Cascade(org.hibernate.annotations.CascadeType.ALL) 
     @JoinTable(name="SRC_DATE", [email protected](name="DATE_ID"), 
        [email protected](name="SRC_ID")) 
    private List<ScheduleRotationChild> scheduleRotationChild = new ArrayList<ScheduleRotationChild>(); 


     //getter and setter methods ommited 


     public String toString() { 

      return dateId + " , " 
      + particularDate + " , " 
      + childGoSchoolDate + " , " 
      + childAdmissionDate + " " + scheduleRotationChild ; 

     } 

} 

내가 그것을 해결하기 위해 도와주세요.

+2

내가 생각하는 매개 변수 인덱스로 시작을 1 (0이 아닌) – hoaz

+0

@hoaz 나는 그것을 1로 시작 않는, 즉 사실, 당신을 백업 할 수 있습니다 – acdcjunior

답변

0

creationDate은 집합이므로 JOIN해야합니다. 세트 자체에는 날짜가 아닌 CreationDate의 인스턴스가 들어 있습니다. 결국

가이 같은 보일 것이다 :

select i from Institution i JOIN i.creationDate d where i.nameOfInstitution =? and d.particularDate=? 
+0

답변 해 주셔서 감사합니다. 나는 당신이 어떻게 말했고 예외는 여전히 발생한다. "main"쓰레드에서 예외가 발생한다. org.hibernate.hql.ast.QuerySyntaxException : 조인 할 경로가 예상된다! [edu.demidov.dom.Institution에서 i를 선택하십시오. creationDate d에 가입하십시오. 여기서 i.nameOfInstitution =? 그리고 d.particularDate =?] –

+0

@ VadimDemidov 나는 그것을 고쳤다 고 생각한다. –

+0

Jimmy TI가 이미 그렇게 해 줘서 고마워. 내 바보 같은 리플레이로 유감이야 .. 내가 궁금해하는 걸 알 잖아. 내가 제대로 해낼거야. 이봐. 나는 엔티티에 가야하고, 통과하고 싶어. 내 메소드에 매개 변수, 각 엔티티에 대한 각 매개 변수를 넣고 쿼리에 넣습니다. 나는 그것을 올바르게 할 것인가, 아니면 기준을 가진 질의와 같은 것을 고려해야 할 것입니다. 제발 도와주세요. –

관련 문제