Oracle自动生成的主键,在我的实体中为@Id

时间:2019-02-06 11:47:48

标签: oracle hibernate jpa

我有一个Entity,其@Id列的值是从DB端的每个插入序列中生成的,即在执行插入操作时不必从服务中填充此值。

如果我不填充值,则JPA / Hibernate抱怨我的@Id不能为null。如果我使用Oracle Sequence Generator,并在插入时为我的@Id填充一个值,我的数据库将抱怨“无法插入到生成的Always Identity列中”

我正在使用Oracle10g语言。

我尝试了GenerationType的所有策略-AUTO,IDENTITY,SEQUENCE,TABLE,但未提及任何序列。

@GeneratedValue(strategy=GenerationType.SEQUENCE)
@Column(name = "INTERACTION_ID", unique = true, nullable = false)
public BigDecimal getINTERACTION_ID() {
    return INTERACTION_ID;
}

很遗憾,我的数据库团队不同意更改此列上的限制。 我正在寻找一个选项,可以通过持久对象插入数据,而不必填充@Id列的值,并且可以自动为我插入数据库。

这是我的DDL的一部分:

CREATE TABLE MY_SCHEMA.MY_TABLE
(
INTERACTION_ID NUMBER(28, 0) DEFAULT "MY_SCHEMA"."ISEQ$$_85362".nextval NOT 
NULL,
...,
...)

请在这里帮助我。

1 个答案:

答案 0 :(得分:1)

尝试将可插入和可更新设置为false,以避免Hibernate尝试设置id。

@Id
@Column(name = "INTERACTION_ID", unique = true, nullable = false, insertable = false, updatable = false)
public BigDecimal getINTERACTION_ID() {
    return INTERACTION_ID;
}
相关问题