Sql 自定义@ForeignKey注释的Hibernate DLL验证似乎失败?

Sql 自定义@ForeignKey注释的Hibernate DLL验证似乎失败?,sql,spring-boot,hibernate,flyway,hibernate-validator,Sql,Spring Boot,Hibernate,Flyway,Hibernate Validator,我对Hibernate根据Flyway初始迁移脚本验证模式有问题 有问题的实体: @实体 @托斯特林 @吸气剂 @塞特 @EqualsAndHashCode @表(name=“代理人描述”) 公共类代理描述{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; @列(name=“short\u description”,长度=512) 私有字符串短描述; @列(name=“long\u description”,长度=2048) 私有

我对Hibernate根据Flyway初始迁移脚本验证模式有问题

有问题的实体:


@实体
@托斯特林
@吸气剂
@塞特
@EqualsAndHashCode
@表(name=“代理人描述”)
公共类代理描述{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“short\u description”,长度=512)
私有字符串短描述;
@列(name=“long\u description”,长度=2048)
私有字符串描述;
@ManyToOne(可选=false,fetch=FetchType.LAZY)
@JoinColumn(foreignKey=@foreignKey(name=“fk\u agent\u id”,value=ConstraintMode.CONSTRAINT))
私人代理;
}
Flyway脚本似乎运行良好,并创建了下表(来自org.flywaydb的调试日志)。SQL旨在使用与
@JoinTable
@ForeignKey
相同的名称设置外键,但验证器似乎尝试使用休眠默认值
实体id
作为外键名称


创建表“代理描述”(
`id`bigint NOT NULL自动增量,
`简短描述'varchar(512)不为空,
`long_description`varchar(2048)不为空,
`fk_代理_id`BIGINT不为空,
约束'FK_Agent_Description'到'u Agent'外键('FK_Agent_id')引用'Agent'('id'),
键“FK\U代理ID”(“FK\U代理ID”),
主键(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1默认字符集=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
我在启动时从Hibernate架构验证程序中得到的错误是:

 Schema-validation: missing column [agent_id] in table [agent_descriptions]
我猜我需要做点什么让验证器使用JPA注释
@JoinTable(foreignKey=@foreignKey(name=“fk_agent_id”)
进行外键验证,或者这是DLL
验证
模式选项的限制


谢谢您的帮助。

foreignKey定义外键约束的名称,而不是列的名称

如果您的列使用Hibernate ORM的默认值,那么它仍然命名为
agent\u id
,因此您的Flyway脚本需要通过以下方式修复:

`agent_id` BIGINT NOT NULL,

非常感谢。这很有帮助。我做了一点挖掘(查看了源代码),只是忽略了您可以在@JoinColumn中设置cloumn名称……如果您只添加,您可以添加@JoinColumn(name=“fk_agent_id”,foreignKey=@foreignKey(name=“fk_foreignKeyName”),我可以验证您的答案:)