如何在JPA实体中自定义友好的外键名称?
解决Spring Boot 2.0中JPA实体自定义友好外键名称的问题
嘿,这个问题我刚好碰到过!在Spring Boot 2.0.0.RELEASE对应的Hibernate 5.2+版本里,原来的Hibernate专属@ForeignKey确实被废弃了,不过不用担心,JPA 2.1已经提供了标准的解决方案,直接在@JoinColumn里配置就行。
具体修改方案
你只需要在@JoinColumn注解中添加foreignKey参数,使用JPA标准的@ForeignKey注解(来自javax.persistence包)来指定自定义的外键名称。修改后的代码如下:
@ManyToOne @JoinColumn( name = "est_id", foreignKey = @ForeignKey(name = "FK_ENTITY_STATE") // 这里替换成你想要的友好名称 ) @JsonIgnoreProperties private State state;
额外说明
- 这个方案是JPA标准实现,不是Hibernate专属,兼容性更强。
- 如果是多对多关联使用
@JoinTable的场景,同样可以在joinColumns和inverseJoinColumns的@JoinColumn中配置foreignKey属性。 - 注意:如果数据库表已经生成,JPA默认不会自动修改已存在的外键名称(除非你把
spring.jpa.hibernate.ddl-auto设为create-drop,但这个配置只适合开发环境)。生产环境建议用Flyway或Liquibase这类数据库迁移工具手动调整外键名称。
内容的提问来源于stack exchange,提问作者Jeterson Miranda Gomes
相关产品推荐
相关产品推荐

