2011-11-18 7 views
6

Ho un problema relativo alla non sequenza trovato quando aggiorno Hibernate da 3,5 a 4.0.0.RC6:ORA-02289: la sequenza non esiste quando l'aggiornamento Hibernate 3 per il letargo 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) 

Qualcuno sa come per risolverlo? Per favore mi faccia sapere. Sto usando Oracle10gDialect e sovrascrivo la funzione getNativeIdentifierGeneratorClass() usando il mio SequenceGenerator. Ha lavorato su Hibernate 3.5, ma eccezione generata quando aggiorno a Hibernate 4.0.0.RC6

Qui di seguito è la mia classe 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); 
    } 
} 

Quando faccio il debug utilizzando hibernate 4, tableName tornare solo REVINFO (funziona in ibernazione 3)

Grazie Hiep

+0

cosa fa il tuo SequenceGenerator fare? – ryanbraganza

risposta

0

ho trovato la risposta.

per generatore id comune per tutte le classi, dovremmo usare

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

Spero che questo aiuto di qualcuno che ha lo stesso problema come me.

0

Anche ho avuto lo stesso problema, utilizzare le seguenti righe

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