关于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))
@JsonIgnore
private AuthDO parent;
/**
* 子权限
*/
@OneToMany(mappedBy = "parent",fetch = FetchType.LAZY)
@OrderBy("authSort asc")
@org.hibernate.annotations.ForeignKey(name = "none")
private List<AuthDO> children;
结束,有更好方法的朋友请回复告知下。谢谢。