我有一個Postgres數據庫如下表:休眠:如何進行逆向工程並使用Postgres串行類型列?
CREATE TABLE net.polygon
(
id serial NOT NULL,
x numeric,
y numeric,
CONSTRAINT pk_polygon PRIMARY KEY (id)
);
自動serial
類型創建一個用來創建一個新的主鍵每一個新行插入此表時的順序:
CREATE SEQUENCE net.polygon_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
我需要從Java程序向這個表中插入數據。我使用Hibernate來反向工程這個數據庫;該reveng.xml
文件看起來像:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
[...]
<table-filter match-name="polygon"></table-filter>
<table name="polygon">
<primary-key>
<generator class="sequence">
<param name="sequence">polygon_id_seq</param>
</generator>
</primary-key>
</table>
</hibernate-reverse-engineering>
這會產生相應的POJO,爲polygon
表下面的映射:
polygon = new Polygon();
polygon.setX(someValue);
polygon.setY(anotherValue);
session.save(polygon);
:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Feb 15, 2016 9:54:40 AM by Hibernate Tools 4.3.1.Final -->
<hibernate-mapping>
<class name="Polygon" table="polygon" optimistic-lock="version">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="sequence">
<param name="sequence">polygon_id_seq</param>
</generator>
</id>
<property name="x" type="big_decimal">
<column name="x" precision="131089" scale="0" />
</property>
<property name="y" type="big_decimal">
<column name="y" precision="131089" scale="0" />
</property>
</class>
</hibernate-mapping>
在Java代碼中,就像創建新Polygon
對象
但它產生以下異常:
ERROR: relation "net.hibernate_sequence" does not exist
我查到了密碼,找不到任何關於這個hibernate_sequence
的引用。如果它是一個序列,爲什麼Hibernate試圖使用它而不是reveng.xml
文件中提供的那個?
更新:Hibernate IRC的人告訴我這是Hibernate Tools的一個問題,即is not yet up to date with the latest Hibernate release。
這很奇怪。你有沒有嘗試清理建立你的項目? –
是的,但錯誤依然存在。 –