【问题标题】:Hibernate DLL validate for custom @ForeignKey annotation seems to fail?Hibernate DLL 验证自定义 @ForeignKey 注释似乎失败了?
【发布时间】:2021-04-20 10:36:44
【问题描述】:

Hibernate 针对 Flyway 初始迁移脚本验证架构时遇到问题。

有问题的实体失败:


@Entity
@ToString
@Getter
@Setter
@EqualsAndHashCode
@Table(name = "agent_descriptions")
public class AgentDescriptions {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "short_description", length = 512)
    private String shortDescription;

    @Column(name = "long_description", length = 2048)
    private String longDescription;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(foreignKey = @ForeignKey(name = "fk_agent_id",value = ConstraintMode.CONSTRAINT))
    private Agent agent;
}

Flyway 脚本似乎运行良好并创建了下表(来自 org.flywaydb 的调试日志)。 SQL 旨在设置与 @JoinTable @ForeignKey 同名的外键,但验证器似乎尝试使用 Hibernate 默认的 entity_id 作为外键名称。


create TABLE `agent_descriptions` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `short_description` varchar(512) NOT NULL,
    `long_description` varchar(2048) NOT NULL,
    `fk_agent_id` BIGINT NOT NULL,
    CONSTRAINT `FK_Agent_Description_To_Agent` FOREIGN KEY (`fk_agent_id`) REFERENCES `agents` (`id`),
    KEY `FK_Agent_ID` (`fk_agent_id`),
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=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 validate 架构选项的限制?

感谢您的帮助。

【问题讨论】:

    标签: sql spring-boot hibernate flyway hibernate-validator


    【解决方案1】:

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

    如果您的列使用 Hibernate ORM 的默认值,则您的列仍命名为 agent_id,因此您的 Flyway 脚本需要以这种方式修复:

    `agent_id` BIGINT NOT NULL,
    

    【讨论】:

    • 谢谢。这很有帮助。我做了一些挖掘(查看源代码),只是忽略了你可以在@JoinColumn 中设置 cloumn 名称......如果你只是添加,你可以添加 @JoinColumn(name="fk_agent_id", foreignKey=@ForeignKey(name= "FK_foreignKeyName") 我可以验证你的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多