복붙노트

[SPRING] mysql : = 연산자를 만나면 Hibernate 예외가 발생한다.

SPRING

mysql : = 연산자를 만나면 Hibernate 예외가 발생한다.

다음 코드를 실행하면 예외가 발생합니다.

Exception: org.springframework.orm.hibernate3.HibernateQueryException: 
Not all named parameters have been set

여기 내 코드가 있습니다 :

queryString = SET @quot=0,@latest=0,@comp='';
    select B.* from (
    select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp:=A.company as company from (
    select time,company,quote-@quot as `change`, @quot:=quote curr_quote
    from stocks order by company,time) A
    order by company,time desc) B where B.LATEST=1;

list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session)throws     HibernateException,SQLException {
        SQLQuery  query = session.createSQLQuery(queryString);
        query.setParameterList("list", custIds);
        return query.list();
    }

이 행동의 이유는 무엇입니까?

해결법

  1. ==============================

    1.이해하기가 조금 어렵습니다. 정확하게 실행중인 쿼리는 무엇입니까? 네이티브 쿼리에서 콜론 문자를 사용해야하는 경우에는 "값 지정"연산자로 사용할 경우 콜론 발생을 모두 이스케이프 처리해야합니다. \ 귀하의 자바 문자열에서 쿼리와 함께, 그렇게 될 수 있습니다 :

    이해하기가 조금 어렵습니다. 정확하게 실행중인 쿼리는 무엇입니까? 네이티브 쿼리에서 콜론 문자를 사용해야하는 경우에는 "값 지정"연산자로 사용할 경우 콜론 발생을 모두 이스케이프 처리해야합니다. \ 귀하의 자바 문자열에서 쿼리와 함께, 그렇게 될 수 있습니다 :

    select B.* from (
      select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp\\:=A.company as company from (
          select time,company,quote-@quot as `change`, @quot\\:=quote curr_quote
          from stocks order by company,time) A
        order by company,time desc) B where B.LATEST=1;
    

    업데이트 : Hibernate 네이티브 쿼리에서 콜론을 빠져 나오기는 아직 불가능합니다. 오픈에 관한 문제가 있습니다. 즉, 명명 된 매개 변수가 아닌 Hibernate 기본 쿼리에서 콜론을 사용할 수 없다는 뜻입니다. 함수를 만들고 쿼리를 호출하는 대신 함수를 호출 할 수 있습니다.

  2. ==============================

    2.명명 된 쿼리를 생성 한 다음 spring jpa 저장소 또는 최대 절전 모드에서 사용할 수 있습니다. 이 링크는 비슷한 문제에서 나를 도왔다.

    명명 된 쿼리를 생성 한 다음 spring jpa 저장소 또는 최대 절전 모드에서 사용할 수 있습니다. 이 링크는 비슷한 문제에서 나를 도왔다.

  3. from https://stackoverflow.com/questions/33146012/hibernate-exception-on-encountering-mysql-operator by cc-by-sa and MIT license