关于Spring JPA不想使用外键的同学@ForeignKey

关于Spring JPA不想使用外键的同学@ForeignKey

起因:

1. 之前看阿里开发手册,其中有一项——**不得使用外键与级联,一切外键概念必须在应用层解决**。
于是新开一个项目想用这种方式去设计数据库。
2. 个人喜欢用jpa开发,能自动创建表的功能用起来很爽,但是只要配置一对多,多对多查询代码就会默认创建外键。

代码
打印的语句
打印的语句
数据库中
数据库中

网上的解决方案

  1. 第一种,直接修改spring的配置 ,改完自动创建表都不行了,直接pass
// An highlighted block
spring.jpa.hibernate.ddl-auto=none
  1. 第二种,在JoinColumn注解中,设置foreginKey. 这种配置大部分可用,但是存在失效的情况
// An highlighted block
 	@ManyToOne
    @JoinColumn(name = "tid",foreignKey = @ForeignKey(name = "none",value = ConstraintMode.NO_CONSTRAINT))
    private Teacher teacher;

最后的解决方案

第二种方案大部分没问题,但是还有一种情况就是存在mappedBy的情况
在这里插入图片描述
代码如下:

 /**
     * 上级权限
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "parent_id", referencedColumnName = "id",foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
    @JsonIgnore
    private AuthDO parent;

    /**
     * 子权限
     */
    @OneToMany(mappedBy = "parent",fetch = FetchType.LAZY)
    @OrderBy("authSort asc")
    @org.hibernate.annotations.ForeignKey(name = "none")
    private List<AuthDO> children;

结束,有更好方法的朋友请回复告知下。谢谢。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值