您好我遇到了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注释的内容?
答案 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;
}