ORA-02289: последовательность не существует при обновлении Hibernate 3 до Hibernate 4 - PullRequest
6 голосов
/ 18 ноября 2011

У меня проблема, связанная с последовательностью, не найденной при обновлении 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
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 и переопределяю функцию getNativeIdentifierGeneratorClass () с помощью моего собственного SequenceGenerator.Он работал на 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);
    }
}

Когда я выполняю отладку с использованием hibernate 4, tableNameвернуть только REVINFO (работает в hibernate 3)

Спасибо, Hiep

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Я нашел ответ.

Для общего генератора идентификаторов для всех классов, мы должны использовать

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

Надеюсь, что это поможет кому-то, кто имеет такую ​​же проблему, как я.

0 голосов
/ 16 июля 2015

Даже если у меня возникла та же проблема, используйте следующие строки

@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...