我有一个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,
...,
...)
请在这里帮助我。
答案 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;
}