【问题标题】:Exception: Repeated column in mapping for entity: column: hash (should be mapped with insert="false" update="false")例外:实体映射中的重复列:列:哈希(应使用 insert="false" update="false" 映射)
【发布时间】:2020-04-15 15:11:16
【问题描述】:

我对 Hibernate 框架非常陌生,并且在运行代码时遇到异常:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.hibernate.SessionFactory]: Factory method 'sessionFactory' threw exception; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: LeiRecord column: hash (should be mapped with insert="false" update="false")

我在 SpringConfiguration、oracleDataDao 的很多地方都遇到了这个错误,但由于我没有在映射中定义重复的列,所以我不明白代码哪里出错了

【问题讨论】:

    标签: java spring hibernate exception lombok


    【解决方案1】:

    您应该将Address 类注释为@Embeddable,然后在LeiRecord 实体中为addressLegaladdressHeadquearters 引用其实例

    @Embeddable
    @Getter
    @Setter
    public class Address {
    
       private String firstAddr;
       private String nextAddr;
       //... etc.
    }
    
    @Getter
    @Data
    @Entity
    @Table(name = "BK_TEST")
    @Immutable
    public class LeiRecord {
    // ...
        @Embedded
        @AttributeOverrides(
            {
                @AttributeOverride(name = "firstAddr",   column = @Column(name = "legalAddress_firstAddr")),
                @AttributeOverride(name = "nextAddr",    column = @Column(name = "legalAddress_nextAddr")),
                @AttributeOverride(name = "region",      column = @Column(name = "legalAddress_region")),
                @AttributeOverride(name = "postalCode",  column = @Column(name = "legalAddress_postalCode")),
                @AttributeOverride(name = "city",        column = @Column(name = "legalAddress_city")),
                @AttributeOverride(name = "country",     column = @Column(name = "legalAddress_country")),
                @AttributeOverride(name = "mailRouting", column = @Column(name = "legalAddress_mailRouting"))
            }
        )
        private Address addressLegal;
    
        @Embedded
        @AttributeOverrides(
            {
                @AttributeOverride(name = "firstAddr",   column = @Column(name = "headquartersAddress_firstAddr")),
                @AttributeOverride(name = "nextAddr",    column = @Column(name = "headquartersAddress_nextAddr")),
                @AttributeOverride(name = "region",      column = @Column(name = "headquartersAddress_region")),
                @AttributeOverride(name = "postalCode",  column = @Column(name = "headquartersAddress_postalCode")),
                @AttributeOverride(name = "city",        column = @Column(name = "headquartersAddress_city")),
                @AttributeOverride(name = "country",     column = @Column(name = "headquartersAddress_country")),
                @AttributeOverride(name = "mailRouting", column = @Column(name = "headquartersAddr_mailRouting"))
            }
        )
        private Address addressHeadquarters;
    
        //... other entity fields
    
    }
    

    【讨论】:

    • 现在我得到了不同的错误: 原因:org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing column [hash] in table [LEI_TEST] in SpringCONfiguration and oracleDataDao class文件
    • 我已经用我正在尝试阅读的 xml 架构更新了我的问题
    • LeiTestLeiRecord 是同一张表吗?我看不到有关其相关实体类的任何信息。
    • 我不明白哈希在我的班级或数据库表中永远不是列
    • 您的实体中似乎还有另一个无效的嵌入值:``` @Embedded 私有字符串注册; ```您需要将类注册注释为可嵌入
    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    相关资源
    最近更新 更多