![](/img/trans.png)
[英]JPA (Hibernate): “ORA-02289 Sequence does not exist”, but it does
[英]ORA-02289: sequence does not exist when upgrade Hibernate 3 to hibernate 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
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 4.0.0.RC6時,它已經在Hibernate 3.5上工作但拋出了異常
下面是我的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
我找到了答案。
對於所有類的通用id生成器,我們應該使用
@Id
@GeneratedValue(generator="GENERATOR_COMMON")
@GenericGenerator(name="GENERATOR_COMMON",strategy="point.to.table.generator")
希望這能幫助像我這樣有同樣問題的人。
即使我遇到同樣的問題,請使用以下行
@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.