Hibernate 6.4.4中@ElementCollection的ON DELETE CASCADE配置异常
解决Hibernate 6.4.4中@ElementCollection生成ON DELETE CASCADE的问题
Hibernate 6.x对注解校验逻辑做了严格调整,你之前的配置方式不再适用。以下是两种可行的解决方案:
方案一:使用JPA标准注解(推荐)
通过@ForeignKey的onDelete属性配置级联删除,这是JPA标准语法,兼容性更好,且无需依赖Hibernate特定注解:
@ElementCollection @CollectionTable( name = "project2user", joinColumns = @JoinColumn( name = "project_id", foreignKey = @ForeignKey(onDelete = ForeignKeyAction.CASCADE) ) ) @Column(name = "user_id", nullable = false) private Set<Long> users;
Hibernate会自动根据当前数据源的schema生成带ON DELETE CASCADE的外键约束,完全适配编译时未知schema的场景。
方案二:使用Hibernate特定注解
如果你更倾向于保留Hibernate的@OnDelete,需要通过joinColumns属性明确关联外键列,满足Hibernate 6.x的校验要求:
@ElementCollection @CollectionTable(name = "project2user", joinColumns = @JoinColumn(name = "project_id")) @Column(name = "user_id", nullable = false) @OnDelete( action = OnDeleteAction.CASCADE, joinColumns = @JoinColumn(name = "project_id") ) private Set<Long> users;
失效原因说明
- Hibernate 6.x禁止直接在
@ElementCollection字段上标注@JoinColumn,要求外键列配置必须放在@CollectionTable内部; - 单独使用
@OnDelete时,必须明确指定关联的外键列,否则无法确定要给哪个外键添加级联删除规则。
内容的提问来源于stack exchange,提问作者dpelisek
相关产品推荐
相关产品推荐

