Jpa 什么会导致用@GeneratedValue(strategy=GenerationType.IDENTITY)注释的id为空 实体 属性核心 Attribute.java 调用 从@Stateless@LocalBean类。

Jpa 什么会导致用@GeneratedValue(strategy=GenerationType.IDENTITY)注释的id为空 实体 属性核心 Attribute.java 调用 从@Stateless@LocalBean类。,jpa,Jpa,调用上述saveInstance方法会产生以下结果: SQL Error: 1400, SQLState: 23000 ORA-01400: cannot insert NULL into ("COMMON_USER"."ATTRIBUTE_SCORE"."ID") 这个问题的名字几乎说明了一切。我正在尝试持久化属性的新实例\u SCORE。传递到saveInstance的实体的id为null。你知道为什么这样不行吗 我真的不知道该去

调用上述
saveInstance
方法会产生以下结果:

SQL Error: 1400, SQLState: 23000
ORA-01400: cannot insert NULL into ("COMMON_USER"."ATTRIBUTE_SCORE"."ID")
这个问题的名字几乎说明了一切。我正在尝试持久化
属性的新实例\u SCORE
。传递到
saveInstance
实体
id
null
。你知道为什么这样不行吗

我真的不知道该去哪里找

编辑

结果是生成了错误的sql:

Hibernate: insert into common_user.ATTRIBUTE_SCORE (ATTRIBUTE_ID, SCORE) values (?, ?)
应该是:

Hibernate: insert into common_user.ATTRIBUTE_SCORE (ID, ATTRIBUTE_ID, SCORE) values (?, ?, ?)

所以新问题是:为什么要排除id字段?

如果为@GeneratedValue使用策略javax.persistence.GenerationType.IDENTITY,那么您的表必须有一个标识生成器。这可以通过自动增加主键来完成

如果您没有为id字段设置任何值,那么它应该是null或默认值(或者,如果您设置该属性,它将自动递增)

@GeneratedValue注释只是告诉Hibernate数据库本身正在生成这个值。因此,自动增量也应该在数据库中定义

这个环节也有类似的问题,,

我正在使用OracleDB,不幸的是它没有自动递增功能。我没有注意到那个帖子,谢谢。
SQL Error: 1400, SQLState: 23000
ORA-01400: cannot insert NULL into ("COMMON_USER"."ATTRIBUTE_SCORE"."ID")
Hibernate: insert into common_user.ATTRIBUTE_SCORE (ATTRIBUTE_ID, SCORE) values (?, ?)
Hibernate: insert into common_user.ATTRIBUTE_SCORE (ID, ATTRIBUTE_ID, SCORE) values (?, ?, ?)