我想在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);
答案 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 配置将删除您的所有表并将它们重新创建为空。