【问题标题】:Can Hibernate handle overlapping columns in composite types?Hibernate 可以处理复合类型中的重叠列吗?
【发布时间】:2021-09-01 09:54:48
【问题描述】:

存在一个已知的休眠错误https://hibernate.atlassian.net/browse/HHH-6221,其中重叠的外键会触发 AnnotationException。在@JoinColumns 中,您不能同时拥有可插入和不可插入的@JoinColumn 条目。

这有一个使用@JoinColumnsOrFormulashttps://stackoverflow.com/a/13147366/16400385 的解决方法。

@Columns 存在相同的错误,但我找不到 @ColumnsOrFormulas 注释。 @Columns 有类似的解决方法吗?

示例代码

    @Columns( columns = {
        @Column(name = "currency_id", updatable = false, insertable = false),
        @Column(name = "fees")
    })
    private Money fees;

    @Columns( columns = {
            @Column(name = "currency_id"),
            @Column(name = "tax")
    })
    private Money tax;

我得到的错误是

'org.hibernate.AnnotationException: 混合可插入和不可 属性中不允许插入列'

,同HHH-6221

【问题讨论】:

    标签: hibernate jpa compositeusertype


    【解决方案1】:

    没有解决方法或任何解决方法,因为这种模型只是有问题/损坏。您可以做的一件事是映射实体中的各个列并通过@PostLoad 侦听器构建一个货币实例。

    【讨论】:

    • 谢谢!这是用 Hibernate 创建 Money Value 对象的正确方法吗? martinfowler.com/eaaCatalog/money.html 。虽然我的注释肯定有问题或被破坏,但货币价值对象的概念不是。
    • 当然,这个概念完全没问题,但映射根本不是你如何保持映射的方式,唯一的调整是,你有一个专门的货币列每个属性。这也适用于 Hibernate。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多