Oracle Database 11g 용 Hibernate 방언?


98

Oracle Database 11g에 Hibernate 언어가 있습니까? 아니면 org.hibernate.dialect.Oracle10gDialectHibernate와 함께 제공되는를 사용해야 합니까?

답변:


104

Oracle 10g 방언을 사용하십시오. 또한 최신 JDBC 드라이버에는 Hibernate 3.3.2+가 필요합니다 (내부 클래스 구조가 변경됨-증상이 추상 클래스에 대해 징징 거리게됩니다).

Oracle 11g의 방언은 Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ) 와 동일 합니다. 출처 : http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects


2
불행히도 "ORA-01754 : 테이블은 LONG 유형의 열을 하나만 포함 할 수 있습니다"에 대해서는 도움이되지 않습니다.
Jan Goyvaerts 2013 년

특정 예약 함수 INTERVAL에 문제가 있습니다. 예 : "@Formula ("SYSDATE-INTERVAL '1'HOUR * SHOW_LIMIT_HOURS ")". 나는 그것이 몇 가지 문제를 일으킬 수 있다는 것을 모르지만 좋은 해결책 인 것 같습니다 : stackoverflow.com/a/26907699/1488761
Eduardo Fabricio

12

지원되는 데이터베이스 에 따르면 Oracle 11g는 공식적으로 지원되지 않습니다. .NET을 사용하는 데 문제가 없어야한다고 생각합니다 org.hibernate.dialect.OracleDialect.


15
마음 org.hibernate.dialect.OracleDialect되지 않습니다 ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/... ). Oracle 10g 언어를 사용해야합니다.
Yonatan 2012 년

7
이제 Oracle 11이 지원됩니다
MJB

8
@MJB가 지적했듯이 Oracle 11이 지원됩니다. 누락 된 부분은 다음과 같습니다 그것은 org.hibernate.dialect.Oracle10gDialect 클래스 지원됩니다 링크 (너무 4.x의 hiernate 적용)
bmichalik

4

모드를 org.hibernate.dialect.Oracledialect 사용 하는 (더 이상 사용되지 않는) 언어 및 Oracle 11g 데이터베이스에 문제가 발생했습니다 hibernate.hbm2ddl.auto = validate.

이 방언으로 Hibernate는 시퀀스를 찾을 수 없었습니다 ( getQuerySequencesString() 메소드 의 구현 때문에 다음 쿼리를 반환합니다.

"select sequence_name from user_sequences;"

실행이 데이터베이스에서 빈 결과를 반환하는 경우).

방언 org.hibernate.dialect.Oracle9iDialect 이상을 사용하면 getQuerySequencesString() 메서드 구현이 다르기 때문에 문제가 해결됩니다 .

"select sequence_name from all_sequences union select synonym_name from all_synonyms us, all_sequences asq where asq.sequence_name = us.table_name and asq.sequence_owner = us.table_owner;"

대신 실행되면 모든 시퀀스를 반환합니다.


2

적어도 EclipseLink 10g와 11g의 경우가 다릅니다. 11g 이후 페이지 매김 쿼리에 first_rows 힌트를 사용하지 않는 것이 좋습니다.

"특정 쿼리별로 jpa 힌트를 비활성화 할 수 있습니까?"를 참조하십시오 . 이러한 쿼리는 11g에서 사용해서는 안됩니다.

SELECT * FROM (
  SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum  FROM (
    SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
  WHERE ROWNUM <= 10 )
WHERE rnum > 0;

그러나 다른 뉘앙스가있을 수 있습니다.


0

WL 10을 사용하는 경우 다음을 사용하십시오.

org.hibernate.dialect.Oracle10gDialect


-1

org.hibernate.dialect.OracleDialect 만 사용하십시오. 10g, 9 등을 제거하십시오.


이것은 "darioo"도 제안했지만 @Yonatan의 답변에 대한 의견을 읽으십시오.
Tom Brunberg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.