2011-11-18 11 views
6

Mam problem związany z sekwencją nie znaleziono, kiedy uaktualnić hibernacji od 3,5 do 4.0.0.RC6:ORA-02289: Sekwencja nie istnieje, gdy uaktualnienie hibernacji 3 do hibernacji 4

at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:703) [hibernate-core-4.0.0.CR6.jar:4.0.0.CR6] 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:707) [hibernate-core-4.0.0.CR6.jar:4.0.0.CR6] 
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:847) [hibernate-entitymana 
ger-4.0.0.CR6.jar:4.0.0.CR6] 
... 159 more 
Caused by: java.sql.SQLSyntaxErrorException: ORA-02289: sequence does not exist 

at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91) 
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413) 
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1034) 
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194) 
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:791) 
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:866) 
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186) 
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3387) 
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3431) 

Każdy wie, jak naprawić to? proszę daj mi znać. Używam Oracle10gDialect i zastępuję funkcję getNativeIdentifierGeneratorClass() przy użyciu mojego własnego SequenceGenerator. To działało na Hibernate 3.5 ale rzucony wyjątek, kiedy uaktualnienia do hibernacji 4.0.0.RC6

Poniżej jest moja klasa TableNameSequenceGenerator:

public class TableNameSequenceGenerator extends SequenceGenerator { 

    public void configure(Type type, Properties params, Dialect dialect) throws MappingException { 
     if(params.getProperty(SEQUENCE) == null || params.getProperty(SEQUENCE).length() == 0) { 
      String tableName = params.getProperty(PersistentIdentifierGenerator.TABLE); 
      if(tableName != null) { 
       String seqName = tableName + "_SEQ"; 
       params.setProperty(SEQUENCE, seqName);    
      } 
     } 
     super.configure(type, params, dialect); 
    } 
} 

Kiedy zrobić debugowanie za pomocą hibernacji 4, tableName powrócić tylko REVINFO (to działa w hibernacji 3)

Dzięki Hiep

+0

Co twoja SequenceGenerator zrobić? – ryanbraganza

Odpowiedz

0

znalazłem odpowiedź.

do wspólnego generatora id dla wszystkich klas, powinniśmy używać

@Id 
@GeneratedValue(generator="GENERATOR_COMMON") 
@GenericGenerator(name="GENERATOR_COMMON",strategy="point.to.table.generator") 

nadzieję, że to pomóc komuś, kto ma ten sam problem jak ja.

0

Nawet mam ten sam problem, należy zastosować następujące linie

@GenericGenerator(name = "increment", strategy = "increment") 
@GeneratedValue(generator = "increment")