2015-01-26 5 views
0

Sybase 15 데이터베이스 호출에 대해 교차 조인을 생성하는 명명 된 쿼리가 있습니다. 조인을 사용하려면 내 쿼리를 다시 형식화해야하지만 필요한 구문을 파악할 수는 없다고 생각합니다. 객체와 그 매핑은 다음과JPQL 쿼리가 Sybase의 'cross'근처에서 잘못된 구문을 생성합니다.

WorkflowDef 있습니다

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
@JoinColumn(name = "workflow_type_id", nullable = false) 
private WorkflowType workflowType; 
WorkflowInstance
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
@Fetch(FetchMode.SELECT) 
@JoinColumn(name = "workflow_def_id", nullable = false, updatable = false) 
private WorkflowDef workflowDef; 

내 이름 쿼리는이 오류가 발생합니다

@NamedQuery(name = "WorkflowInstance.hasStatus", query = "SELECT wi.id FROM WorkflowInstance wi WHERE wi.deal.id = :dealId AND wi.workflowDef.workflowType.systemKey = :wfTypeName AND wi.status IN (:statuses)") 

입니다

2015-01-26 16:27:24,237 DEBUG [http-8080-3] util.SQLStatementLogger - 
select 
    workflowin0_.wf_instance_id as col_0_0_ 
from 
    tbl_wf_instance workflowin0_ cross 
join 
    tbl_workflow_def workflowde1_ cross 
join 
    tbl_lkp_workflow_type workflowty2_ 
where 
    workflowin0_.workflow_def_id=workflowde1_.workflow_def_id 
    and workflowde1_.workflow_type_id=workflowty2_.workflow_type_id 
    and workflowin0_.deal_id=? 
    and workflowty2_.name=? 
    and (
     workflowin0_.status in (
      ? 
     ) 
    ) 

2015-01-26 16 : 27 : 24,238 TRACE [http-8080-3] type.NullableType - 매개 변수에 '60001972'바인딩 : 2015-01-26 16 : 27 : 24,239 TRACE [http-8080 -3] type.NullableType - 매개 변수에 'CREDIT'바인딩 : 2 2015-01-26 16 : 27 : 24,240 DEBUG [http-8080-3] type.EnumType - 매개 변수에 '2'바인딩 : 3 2015-01 -26 16 : 27 : 24,277 WARN [http-8080-3] util.JDBCExceptionReporter - SQL 오류 : 102, SQLState : 42000 2015-01-26 16 : 27 : 24,278 오류 [http-8080-3] util.JDBCExceptionReporter - '십자가'근처의 구문이 잘못되었습니다. 내가 사용하고

의 I 잘못 가고 어디

<property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="false"/> 
      <property name="databasePlatform" value="org.hibernate.dialect.SybaseASE15Dialect"/> 
     </bean> 
    </property> 

사람이 조언을 할 수 있습니까 지속성 단위로 다음?

+0

의 SybaseASE15Dialect를 사용합니다. 데이터베이스에 대해 직접 실행 해 보았습니까? 쿼리가 정확히 무엇이 잘못되었는지에 대해 좀 더 알아 내려고 노력하십시오. (필자는 Sybase 15 전문가가 쿼리에 어떤 문제가 있는지 자동으로 알지 못합니다.)이를 통해 수행해야 할 작업에 대한 통찰력을 얻을 수 있습니다. – dcsohl

+0

dcsohl 문제는 sybase가 교차 조인 구문을 허용하지 않는다는 것입니다. 이 알려진 된 문제가 있지만 더 큰 문제는이 십자가 조인/전체 외부 조인 안된다 어쨌든 그래서 나는 – Craig

+0

... 내 매핑 또는 명명 된 쿼리 구문 문제가있는 것입니다 믿습니다 – Craig

답변

0

CROSS JOIN 구문은 지원되지 않지만 키워드 CROSS 만 제거 할 수 있습니다. 의미론은 변하지 않습니다.

+0

안녕 롭, 제거 키워드 '십자'는 데이터베이스에 대해 직접 쿼리를 실행하면 오류가 발생합니다 .... "키워드 조인 근처에 구문이 잘못되었습니다."또한 나는 여전히 JPA 쿼리가 십자가 조인을 생성하려고 시도해서는 안되며 대신 내부 조인 – Craig

+0

은 "키워드 근처에 잘못된 구문이 있어야합니다"라고 미안하다고 생각합니다. – Craig

0

JOININNER JOIN과 동일합니다. 문제는 ANSI 스타일 조인에 필요한 ON 절이 없다는 것입니다. 카디 전 곱이 실제로 필요하면 각 JOIN 절에 ON 1=1을 추가하십시오.

0

궁극적으로 이는 엔티티에 정의 된 매핑보다는 오래된 하이버 네이트 라이브러리에 문제가있는 것처럼 보입니다. 라이브러리를 업그레이드하면 sybase 백엔드에 대해 올바른 sql이 생성됩니다.

-1

이것은 방언 때문에 다른 방언을 변경해보십시오. 예 : 당신이베이스를 사용하는 경우 hibernate.cfg.xml 내에서 ...

해결 방법 대신 SybaseASEDialect

당신은이 SQL을 생성 한