AttributeOverrides注释不创建列的正确名称

时间:2014-06-07 15:17:27

标签: java hibernate jpa

您好我遇到了Hibernate和@AttributeOverrides注释的问题。

我有可嵌入的课程资金

@Embeddable
 public class Money implements Serializable {

     private BigDecimal denomination;

     private String currencyCode;

 }

包含两个货币对象的实体贷款:价值和利益

 @Entity
 public class Loan {

     @AttributeOverrides({
             @AttributeOverride(name = "valuedenomination", column = @Column(name = "valuedenomination")),
             @AttributeOverride(name = "valuecurrencycode", column = @Column(name = "valuecurrencycode")) })
     private Money value;

    @AttributeOverrides({
             @AttributeOverride(name = "interestdenomination", column = @Column(name = "interestdenomination")),
             @AttributeOverride(name = "interestcurrencycode", column = @Column(name = "interestcurrencycode")) })
     private Money interest;

 }

当我尝试打包应用程序时,我得到了以下原因:

引起:org.hibernate.MappingException:实体映射中的重复列:org.finance.app.core.domain.common.loan.Loan column:currencyCode(应使用insert =&#34映射; false&# 34;更新="假")

当我从dataBase中的Loam中删除One Money实体时,我得到了两个字段: 我在“AttributeOverrides”中添加了currencyCode和denomination而不是valuecurrencyCode和valuedenomination。

我是否遗漏了使用AttributeOverrides注释的内容?

1 个答案:

答案 0 :(得分:1)

AttributeOverride::name应该是嵌入式类Money中的属性名称。所以你的映射应该是这样的:

 @Entity
 public class Loan {

     @AttributeOverrides({
             @AttributeOverride(name = "denomination", 
                                column = @Column(name = "valuedenomination")),
             @AttributeOverride(name = "currencyCode", 
                                column = @Column(name = "valuecurrencycode")) })
     private Money value;

    @AttributeOverrides({
             @AttributeOverride(name = "denomination", 
                                column = @Column(name = "interestdenomination")),
             @AttributeOverride(name = "currencyCode", 
                                column = @Column(name = "interestcurrencycode")) })
     private Money interest;

 }