java hibernate在非主键字段上自动生成序列
我在使用hibernate 5.5
+postgresql 13
我想要自动生成序列字段(数据库端的自动生成,而不是java端的自动生成),这相当于postgres中的DDL:
CREATE TABLE map_objects (
oid BIGSERIAL NOT NULL,
vid BIGSERIAL NOT NULL,
msg VARCHAR,
PRIMARY KEY (vid)
);
正如您在DDL中所看到的,在db端vid
和oid
都是自动生成的,但是vid
是pk
,而oid
不是
在psql中运行这个普通的DDL sql之后,我得到了1个表和2个序列,这2个序列用于为vid
和oid
生成默认值
Table "public.map_objects"
Column | Type | Collation | Nullable | Default
--------+-------------------+-----------+----------+------------------------------------------
oid | bigint | | not null | nextval('map_objects_oid_seq'::regclass)
vid | bigint | | not null | nextval('map_objects_vid_seq'::regclass)
msg | character varying | | |
我希望在hibernate实体声明中有一个等效的定义,下面是我尝试的:
@Entity
public class MapObject {
@Id
@Generated(GenerationTime.INSERT)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long vid;
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Generated(GenerationTime.INSERT)
private Long oid;
private String msg;
}
vid
是好的,但是oid
没有按照我预期的方式工作,它为oid
插入了null
值,甚至在java端没有自动生成值
try2:GenerateType.SEQUENCE
,但没有运气
try3:
@Column(name = "oid", columnDefinition = "BIGSERIAL", nullable = true)
private Long oid;
这种方法基本上是手动定义列,ORM对实体一无所知,因此在我插入对象后,hibernate不会填充从db生成的oid
,它在Java端仍然为空,因此这仍然不是我预期的行为
共 (0) 个答案