本文主要是介绍关于Spring JPA不想使用外键的同学@ForeignKey,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于Spring JPA不想使用外键的同学@ForeignKey
起因:
1. 之前看阿里开发手册,其中有一项——**不得使用外键与级联,一切外键概念必须在应用层解决**。
于是新开一个项目想用这种方式去设计数据库。
2. 个人喜欢用jpa开发,能自动创建表的功能用起来很爽,但是只要配置一对多,多对多查询代码就会默认创建外键。
打印的语句
数据库中
网上的解决方案
- 第一种,直接修改spring的配置 ,改完自动创建表都不行了,直接pass
// An highlighted block
spring.jpa.hibernate.ddl-auto=none
- 第二种,在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))@JsonIgnoreprivate AuthDO parent;/*** 子权限*/@OneToMany(mappedBy = "parent",fetch = FetchType.LAZY)@OrderBy("authSort asc")@org.hibernate.annotations.ForeignKey(name = "none")private List<AuthDO> children;
结束,有更好方法的朋友请回复告知下。谢谢。
这篇关于关于Spring JPA不想使用外键的同学@ForeignKey的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!