ORA-02289:将Hibernate 3升级到休眠4时不存在序列 [英] ORA-02289: sequence does not exist when upgrade Hibernate 3 to hibernate 4

查看:83
本文介绍了ORA-02289:将Hibernate 3升级到休眠4时不存在序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我将hibernate从3.5升级到4.0.0.RC6时,我遇到了与序列相关的问题:

  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
导致:java.sql.SQLSyntaxErrorException:ORA-02289:序列不存在

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);


$ / code>

当我使用hibernate 4进行调试时,tableName返回只有REVINFO(它在hibernate 3中有效)

感谢
Hiep

解决方案 div>

即使我遇到同样的问题,请使用以下命令:

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


I have an issue related to sequence not found when I upgrade hibernate from 3.5 to 4.0.0.RC6:

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)

Anyone know how to fix it? please let me know. I am using Oracle10gDialect and override getNativeIdentifierGeneratorClass() function by using my own SequenceGenerator. It has worked on Hibernate 3.5 but thrown exception when I upgrade to Hibernate 4.0.0.RC6

Below is my TableNameSequenceGenerator class:

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);
    }
}

When I do debugging by using hibernate 4, tableName return REVINFO only (it works in hibernate 3)

Thanks Hiep

解决方案

Even i got the same issue, Use the following lines

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

这篇关于ORA-02289:将Hibernate 3升级到休眠4时不存在序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆