使用@Inheritance插入报错:ID列为GENERATED ALWAYS标识列
错误原因分析
数据库规则限制:你的PostgreSQL数据库中,对应Base实体的
foo表的id列被定义为GENERATED ALWAYS AS IDENTITY类型,这种类型的列禁止手动插入任何值,只能由数据库自动生成自增ID。代码逻辑冲突:Base抽象类里,
id字段被初始化了默认值0,同时标注了@GeneratedValue(strategy = GenerationType.IDENTITY)。当Hibernate执行INSERT操作时,会把这个默认的0作为id的值尝试写入数据库的identity列,这直接违反了PostgreSQL的限制,因此触发报错。补充说明:
GenerationType.IDENTITY的作用是让数据库自动生成ID,但因为你给id字段设置了默认值0,Hibernate会误认为你要手动指定ID,所以在INSERT语句中包含了id字段的赋值操作,最终触发了数据库的错误提示。
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

