如何在Micronaut Data JDBC下通过实体注解添加外键约束
Micronaut Data JDBC 实体类添加外键约束方案
你可以直接通过Micronaut Data原生提供的@ForeignKey注解实现需求,无需引入JPA、Hibernate相关依赖,操作步骤如下:
1. 修改ChildEntity实体类的关联注解配置
在@Relation注解中通过foreignKey属性声明外键配置,修改后的实体代码如下:
import io.micronaut.data.annotation.Id; import io.micronaut.data.annotation.MappedEntity; import io.micronaut.data.annotation.Relation; import io.micronaut.data.annotation.Relation.Kind; import io.micronaut.data.annotation.sql.ForeignKey; @MappedEntity public record ChildEntity ( @Id Long id, String name, // 新增foreignKey配置声明外键约束 @Relation(value = Kind.MANY_TO_ONE, foreignKey = @ForeignKey) ParentEntity parent ) { }
ParentEntity不需要做任何修改。
2. 确认Schema生成配置开启
确保你的项目配置文件(如application.yml)中开启了自动Schema生成,且配置了正确的数据库方言:
datasources: default: schema-generate: CREATE # 按需调整为CREATE_DROP/UPDATE等 dialect: MYSQL # 替换为你实际使用的数据库类型
(可选)自定义外键名称
如果你需要指定生成的外键约束名,可以给@ForeignKey注解添加name属性:
@Relation(value = Kind.MANY_TO_ONE, foreignKey = @ForeignKey(name = "fk_child_entity_parent_id")) ParentEntity parent
生成效果验证
配置完成后Micronaut Data自动生成的建表SQL会自动携带外键约束,child_entity的建表语句如下:
CREATE TABLE
child_entity(idBIGINT NOT NULL,nameVARCHAR(255) NOT NULL,parent_idBIGINT NOT NULL,
CONSTRAINTfk_child_entity_parent_idFOREIGN KEY (parent_id) REFERENCESparent_entity(id)
);
注:如果你的业务允许
parent_id为空,只需要给ParentEntity字段添加@Nullable注解即可,外键约束依然会生效,仅校验非空的parent_id值是否符合参照完整性。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

