缺少序列或表:hibernate_sequence
我是hibernate和postgres的新手。 实际上我正在尝试使用Hibernate映射potgres数据库。 这是我在postgresql中的表结构
CREATE TABLE employee ( id serial NOT NULL, firstname character varying(20), lastname character varying(20), birth_date date, cell_phone character varying(15), CONSTRAINT employee_pkey PRIMARY KEY (id ) )
我正在尝试使用以下代码将记录添加到数据库
System.out.println("******* WRITE *******"); Employee empl = new Employee("Jack", "Bauer", new Date(System.currentTimeMillis()), "911"); empl = save(empl); //This is the save function private static Employee save(Employee employee) { SessionFactory sf = HibernateUtil.getSessionFactory(); Session session = sf.openSession(); session.beginTransaction(); int id = (Integer) session.save(employee); employee.setId(id); session.getTransaction().commit(); session.close(); return employee; }
当我执行代码时,我收到以下错误
org.hibernate.HibernateException: Missing sequence or table: hibernate_sequence Exception in thread "main" java.lang.ExceptionInInitializerError at org.tcs.com.Hibernate.HibernateUtil.buildSessionFactory(HibernateUtil.java:18) at org.tcs.com.Hibernate.HibernateUtil.(HibernateUtil.java:8) at org.tcs.com.Hibernate.MainApp.list(MainApp.java:51) at org.tcs.com.Hibernate.MainApp.main(MainApp.java:17) Caused by: org.hibernate.HibernateException: Missing sequence or table: hibernate_sequence at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1282) at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1740) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1778) at org.tcs.com.Hibernate.HibernateUtil.buildSessionFactory(HibernateUtil.java:15) ... 3 more
我的数据库中有一个名为“employee_id_seq”的序列。 但我不知道为什么数据库正在寻找hibernate_seq。 有人可以解释错误和原因。
提前致谢!
添加了信息
这是我的员工class
import java.sql.Date; public class Employee { private int id; private String firstname; private String lastname; private Date birthDate; private String cellphone; public Employee() { } public Employee(String firstname, String lastname, Date birthdate, String phone) { this.firstname = firstname; this.lastname = lastname; this.birthDate = birthdate; this.cellphone = phone; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public String getCellphone() { return cellphone; } public void setCellphone(String cellphone) { this.cellphone = cellphone; } }
您尚未发布重要位: Employee
类。
但我的猜测是你的Employee类使用@GeneratedValue()
而没有指定要使用的序列。 因此,Hibernate使用其默认名称:hibernate_sequence。
您可以提供序列名称作为GeneratedValue注释的一部分。 例如。
@GeneratedValue(strategy=SEQUENCE, generator="employee_id_seq")
简单解决方案
创建hibernate_sequence表为:
"create sequence .hibernate_sequence"
在您的域或模型对象中,如下所示注释id字段,它应该可以工作。 对我来说,GenerationType.AUTO失败了
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;
如果不使用注释,则应更改YourClass.hbm.xml文件。
您的ID部分应为:
employee_id_seq
文件样本:
This class contains the employee detail. employee_id_seq
你可以做两件事。 一种是手动创建一个空白的hibernate_sequence表postgresql。 二,很可能与用户帐户权限冲突,不允许grails创建该表。
对我来说,导致此错误的原因是MySql.Data库的错误版本。
我在web.config中定义了6.9.6.0版,但实际引用的版本较旧。
我刚评论说:
- Spring 4.2.3.RELEASE和Hibernate 5.0.4.Final兼容性问题
- 如何使用Java删除JSONArray元素
- 无法在数据库中保存clob数据类型(Struts,Spring,Hibernate)
- 添加此ActionListener时出现错误
- 会话关闭后如何强制hibernate释放内存?
- 如何使用Hibernate实现自定义字符串序列标识符生成器
- 期望在模型属性@RequestBody或@RequestPart参数之后立即声明Errors / BindingResult参数
- Hibernate:映射未找到exception
- 使用Hibernate Criteria进行不区分大小写的排序