java.sql.SQLSyntaxErrorException:ORA-02289:在Hibernate中使用Oracle的默认生成策略时序列不存在

时间:2017-06-06 08:57:21

标签: java oracle hibernate

我想在Oracle数据库中保存以下实体。

import javax.persistence.Entity;
import javax.persistence.Id;


@Entity
public class Book {

@Id
@GeneratedValue
private int id;

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}



Book book1 = new Book();
book1.setName("Sample");
session.save(book1);

但是Hibernate正在生成以下异常堆栈跟踪。

Caused by: java.sql.SQLSyntaxErrorException: ORA-02289: sequence does not exist

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)

另外我看到Hibernate试图在查询之下运行以从序列中获取值,这是在生成异常时。

Hibernate: select hibernate_sequence.nextval from dual

表架构:

CREATE TABLE BOOK(
    ID INTEGER,
    NAME VARCHAR2(50)
);

ALTER TABLE BOOK ADD PRIMARY KEY(ID);

2 个答案:

答案 0 :(得分:1)

我能够在另一台我用过Hibernate程序的机器上运行这个程序很多次了。但程序无法在新机器上运行,原因在堆栈跟踪中很明显:

Hibernate: select hibernate_sequence.nextval from dual.

Hibernate无法找到数据库中的默认hibernate_sequence。因此,我没有手动创建序列,而是添加了属性

<property name="hibernate.hbm2ddl.auto">create</property> 

hibernate.cfg.xml中,下次运行程序时,Hibernate创建了这个序列并在Book表中添加了一个新行。

答案 1 :(得分:0)

添加这一行: <property name="hibernate.hbm2ddl.auto">create</property> 到您的 Hibernate 配置将删除您的所有表并将它们重新创建为空。