2011-03-02 4 views
2

MySQL에서 최대 절전 모드를 사용하는 중 이상한 오류가 발생합니다. 나는에 대한 쿼리를 변경하는 경우최대 절전 모드 MySQL 쿼리 오류 가입시 알 수없는 열

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'story0_.CharacterID' in 'on clause' 
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    java.lang.reflect.Constructor.newInstance(Unknown Source) 
    com.mysql.jdbc.Util.handleNewInstance(Util.java:407) 
    com.mysql.jdbc.Util.getInstance(Util.java:382) 

:

select sum(plotline1_.Value) as col_0_0_, story0_.CharacterID as col_1_0_, character2_.CharacterID as Characte1_5_, 
character2_.AuthorID as AuthorID5_, character2_.BookID as BookID5_, character2_.CharacterName as Characte2_5_, 
character2_.LastModified as LastModi3_5_ 
from fantasy.story story0_, fantasy.plotline plotline1_ 
inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID 
where story0_.PlotlineID=plotline1_.PlotlineID and story0_.ChapterID= 4 
group by story0_.CharacterID 
order by count(plotline1_.Value) 

내가 얻을이 실행 :

SELECT SUM(s.plotline.value), s.character FROM Story as s WHERE s.chapter.chapterID = ?1 GROUP BY s.character ORDER BY SUM(s.plotline.value) 

이것은 다음과 같은 SQL 문으로 변환됩니다 : 나는 다음과 같은 명명 된 쿼리가 이것을 제대로 실행하면 SQL에서 직접 실행하십시오.

select sum(plotline1_.Value) as col_0_0_, story0.CharacterID as col_1_0_, character2_.CharacterID as Characte1_5_, 
character2_.AuthorID as AuthorID5_, character2_.BookID as BookID5_, character2_.CharacterName as Characte2_5_, 
character2_.LastModified as LastModi3_5_ 
from fantasy.story story0, fantasy.plotline plotline1_ 
inner join fantasy.character character2_ on CharacterID = character2_.CharacterID 
where story0.PlotlineID=plotline1_.PlotlineID and story0.ChapterID= 4 
group by story0.CharacterID 
order by count(plotline1_.Value) 
왜이 일을 조인 CharacterID에 명시 적 자격을 제거 않습니다이 질문에

  1. 두 부분이 있습니다

    ? 내 경험은 주로 SQL Server를 사용하여 왔습니다.이 방법으로 쿼리를 작성하려고하면 실제로 실패합니다.

  2. Hibernate에서 적절한 형식으로 쿼리를 제공하거나 내 MySQL 구성을 조정하여 최대 절전 모드에서 쿼리를 받아들이도록 만드는 방법이 있습니까?
+0

1 부에 대한 설명을 찾았을 수도 있습니다. http://krisgale.com/beware-of-table-alias-in-left-join/ MySQL은 여러 테이블을 괄호로 묶어야한다고 생각합니다. 버전 5부터 선택하십시오. 내 최대 절전 모드 쿼리를 수정하는 데 도움이되지 않습니다. –

답변

0
  1. "문자는"MySQL은 예약 된 단어입니다. 질의를 던지는 이유가 될 수 있습니까?

  2. 매핑 문서의 backticks에 테이블이나 컬럼 이름을 넣어서 Hibernate가 생성 된 SQL의 식별자를 인용하도록 할 수있다. Hibernate는 SQL Dialect (대개 큰 따옴표이지만 SQL Server에서는 대괄호, MySQL에서는 역 따옴표)에 대해 정확한 인용 스타일을 사용합니다.

1

첫 번째 요청 "story0_"때문에 작동하지 않습니다는 SQL (버전 5.0 당신이 쓰는

from fantasy.story story0_, fantasy.plotline plotline1_ inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID 

"절에" "A에서, 내부 B는 C에 합류"는 알 수없는 것입니다 나중에) B와 C 사이의 내부 조인트 만 고려한 다음이 두 테이블 사이의 "on 절"만 허용합니다.

이 솔루션은 작동합니다 : 괄호 추가

from (fantasy.story story0_, fantasy.plotline plotline1_) inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID

  • 변경 표 순서

from fantasy.plotline plotline1_, fantasy.story story0_ inner join fantasy.character character2_ on story0_.CharacterID=character2_.CharacterID

자세한 내용은 이용 가능한 장소 : https://bugs.mysql.com/bug.php?id=13551

나는 CharacterID도 plotline1_의 필드이기 때문에 해결책이 작품을 발견했다고 생각 나는 현재 내가 왜 발견 되더라도, 최대 절전 모드와이 문제에 직면하고있다

SQL 문은 예외 (그리고 그것을 수정하는 방법)을 제기했기 때문에 Hibernate가이 2 개의 솔루션 중 하나를 생성하도록 강제로 구성하는 방법을 모르겠습니다.

누군가가 Hibernate로 그것을하는 방법을 알고 있다면, 당신의 도움에 감사드립니다!