2011-11-18 55 views
6

我已經當我休眠升級從3.5到4.0.0.RC6測序未發現相關的問題:ORA-02289:升級時Hibernate 3的冬眠序列不存在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) 

有誰知道如何要解決這個問題?請告訴我。我正在使用Oracle10gDialect並使用我自己的SequenceGenerator重寫getNativeIdentifierGeneratorClass()函數。它一直對Hibernate的3.5,但拋出的異常,當我升級到Hibernate 4.0.0.RC6

下面是我的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); 
    } 
} 

當我用冬眠4做調試,表名只返回REVINFO(它在休眠3作品)

感謝 協

+0

什麼是您的SequenceGenerator嗎? – ryanbraganza

回答

0

我找到了答案。

對於所有類的通用ID生成器,我們應該用

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

希望這有助於人誰具有相同的問題,像我一樣。

0

即使我得到了同樣的問題,請使用以下行

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