gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:17:57 25 4
gpt4 key购买 nike

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

我有可嵌入的类(class)钱

@Embeddable
public class Money implements Serializable {

private BigDecimal denomination;

private String currencyCode;

}

实体 Loan 包含两个货币对象:Value 和 Interests

 @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 列:currencyCode(应使用 insert="false"update="假”)

当我从数据库中的 Loam 中删除 One Money 实体时,我得到了两个字段:currencyCode 和 denomination 而不是我在 AttributeOverrides 中放入的 valuecurrencyCode 和 valuedenomination。

我是否错过了带有 AttributeOverrides 注释的内容?

最佳答案

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;

}

关于java - AttributeOverrides 注释不会创建列的正确名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24098649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com