我遇到一个问题,其中@GeneratedValue(strategy=GenerationType.AUTO)
无法正常工作。我有一个错误,说kcyn.hibernate_sequence
不存在。
我阅读了以下主题:hibernate could not get next sequence value。它说我应该将AUTO
更改为IDENTITY
。但是然后,我出现一个错误,说在主键中添加了一个NULL值。
如果我从一个不存在的表开始,采用AUTO
策略,那么休眠会自动用一个airroute
表创建一个hibernate_sequence
表。
但是,由于我想使用现有数据库,所以我的问题是,应该使用哪个GenerationType
才能自动生成我的ID?
package models;
import javax.persistence.*;
@Entity
public class Airroute {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long id;
public String label;
public String spokenname;
public Boolean internal;
public String descr;
public String direction;
}
已更新
Maxsim=# \d+ "KCYN-GOLD-USMC_3_141_553".airroute
Table "KCYN-GOLD-USMC_3_141_553.airroute"
Column | Type | Modifiers | Storage | Stats target | Description
------------+----------------+-----------+----------+--------------+-------------
id | numeric(11,0) | not null | main | |
label | character(8) | | extended | |
spokenname | character(60) | | extended | |
internal | boolean | | plain | |
descr | character(250) | | extended | |
direction | character(1) | | extended | |
Indexes:
"airroute_pkey" PRIMARY KEY, btree (id)
答案 0 :(得分:0)
任何JPA文档都会告诉您,
git commit -m "ACD-1664 | <cursor>"
意味着让JPA提供者做任何喜欢的事情(这样一来您可能就无法得到想要的东西)AUTO
将在RDBMS中使用SEQUENCE(Postgresql支持该序列,因此您可以选择这种情况)SEQUENCE
将在数据库中创建一个表以保存id值(也是您的情况的一种选择)TABLE
将要求您没有在该列上使用的列类型IDENTITY
(不是选项)。对于SERIAL
和SEQUENCE
,JPA提供者将需要能够在该模式中分别创建SEQUENCE或TABLE(并进行配置)