35

私は休止状態と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.<clinit>(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.<init>(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 を探している理由がわかりません。誰かがエラーと理由を説明できますか。

前もって感謝します!

追加情報

これは私の従業員クラスです

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;
}



}
4

8 に答える 8

27

あなたは重要な部分を投稿していません:Employeeクラス。

しかし、私の推測では、@GeneratedValue()使用するシーケンスを指定せずにEmployeeクラスが使用しています。したがって、Hibernateはデフォルト名hibernate_sequenceを使用します。

GeneratedValueアノテーションの一部としてシーケンス名を指定できます。例えば。

@GeneratedValue(strategy=SEQUENCE, generator="employee_id_seq")
于 2013-01-28T11:55:46.827 に答える
10

簡単な解決策:

hibernate_sequence テーブルを次のように作成します。

"create sequence <schema>.hibernate_sequence"
于 2016-07-15T09:41:02.607 に答える
1

Spring Boot または Spring Boot/Hibernate Migration でこれに遭遇した場合は、次のことを試すことができる可能性があります。

https://mkyong.com/spring-boot/spring-boot-mysql-table-db_name-hibernate_sequence-doesnt-exist/
于 2020-07-07T03:00:36.187 に答える
0

アノテーションを使用しない場合は、YourClass.hbm.xml ファイルを変更する必要があります。

ID セクションは次のようになります。

<id name="id" type="int" column="id">
     <generator class="sequence">
         <param name="sequence">employee_id_seq</param>
     </generator>
</id>

ファイルのサンプル:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping>
   <class name="Employee" table="EMPLOYEE">
      <meta attribute="class-description">
         This class contains the employee detail. 
      </meta>
      <id name="id" type="int" column="id">
         <generator class="sequence">
             <param name="sequence">employee_id_seq</param>
         </generator>
      </id>
      <property name="firstName" column="first_name" type="string"/>
      <property name="lastName" column="last_name" type="string"/>
      <property name="salary" column="salary" type="int"/>
   </class>
</hibernate-mapping>
于 2014-02-07T11:36:03.927 に答える
-1

できることは 2 つあります。1 つは、空白の hibernate_sequence テーブル postgresql を手動で作成することです。2 つ目は、ユーザー アカウントのパーミッションが競合して、grails がそのテーブルを作成できない可能性が高いことです。

于 2015-04-24T15:19:37.257 に答える