hibernate - Nested embeddable - 可嵌入的 AttributeOverride

标签 hibernate jpa embeddable

我有类 Money 这是一个@Embeddable

@Embeddable
public class Money implements Serializable, Comparable<Money> {
    @Column(name = "amount", precision = 15, scale = 2)
    private BigDecimal amount;
}

当我在实体内多次使用它时,一切正常。例如
@Entity
public class SomeEntity implements Serializable {

    @Embedded
    @AttributeOverride(name = "amount", column = @Column(name = "entry"))
    private Money entryValue;

    @Embedded
    @AttributeOverride(name = "amount", column = @Column(name = "leave"))
    private Money leaveValue;
}

上面的代码完美运行。

现在,当我有另一个 @Embeddable 我想在其中包含 Money 实例并且 @Embeddable 被实体多次使用时,就会出现问题。例子:
  • 可嵌入
    @Embeddable
    public class ReportCostValues implements Serializable {
    
        @Embedded
        @AttributeOverride(name = "amount", column = @Column(name = "covered_by_grant"))
        private Money coveredByGrant;
    
        @Embedded
        @AttributeOverride(name = "amount", column = @Column(name = "own_resources"))
        private Money foundedFromOwnResources;
    
        @Embedded
        @AttributeOverride(name = "amount", column = @Column(name = "personal_contribution"))
        private Money personalContribution;
    
  • 实体
     @Entity
     public class ReportCostEntity implements Identifiable<Long>, Serializable {
    
        @Id
        private Long id;
    
        @Embedded       
        private ReportCostValues contracted;
    
        @Embedded       
        private ReportCostValues current;
    
        @Embedded        
        private ReportCostValues previousReport;
    

  • 上面的这段代码不起作用。任何想法如何解决这个问题?

    最佳答案

    嗨,你必须使用 @AttributeOverrides在司法上,您必须再次覆盖您在可嵌入 ReportCostValues 中所做的实体中的属性类,希望下面的代码是您正在寻找的。

    @Entity 
    public class ReportCostEntity implements  Serializable {
    
        @Id
        private Long id;
    
        @Embedded   
        @AttributeOverrides( {
            @AttributeOverride(name="coveredByGrant.amount", column = @Column(name="contracted_coveredByGrant") ),
            @AttributeOverride(name="foundedFromOwnResources.amount", column = @Column(name="contracted_foundedFromOwnResources")),
            @AttributeOverride(name="personalContribution.amount", column = @Column(name="contracted_personalContribution"))
        } )
        private ReportCostValues contracted;
    
        @Embedded
        @AttributeOverrides( {
            @AttributeOverride(name="coveredByGrant.amount", column = @Column(name="current_coveredByGrant") ),
            @AttributeOverride(name="foundedFromOwnResources.amount", column = @Column(name="current_foundedFromOwnResources")),
            @AttributeOverride(name="personalContribution.amount", column = @Column(name="current_personalContribution"))
        } )
        private ReportCostValues current;
    
        @Embedded 
        @AttributeOverrides( {
            @AttributeOverride(name="coveredByGrant.amount", column = @Column(name="previousReport_coveredByGrant") ),
            @AttributeOverride(name="foundedFromOwnResources.amount", column = @Column(name="previousReport_foundedFromOwnResources")),
            @AttributeOverride(name="personalContribution.amount", column = @Column(name="previousReport_personalContribution"))
        } )
        private ReportCostValues previousReport;
    
    
    
    
    } 
    

    希望这可以帮助 !!!!!

    关于hibernate - Nested embeddable - 可嵌入的 AttributeOverride,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845575/

    相关文章:

    java - 没有父 ID 作为外键的子表 - JPA/Hibernate

    java - jpa:具有自引用和非抽象父类(super class)的继承

    hibernate - 在 embeddable/embedded-id 中使用 hibernate 序列生成器

    java - Hibernate 中 @Embedded 类的聚合

    java - 如何使用 class 属性映射 hibernate 中的类?

    java - JPA 一对多与多对多 - 书籍和作者

    java - Hibernate 抛出 MultipleBagFetchException - 不能同时获取多个包

    hibernate - @Enumerated(EnumType.STRING) 因 @AttributeOverride 丢失

    java - 在 Spring MVC 应用程序中正确使用 getHibernateTemplate() 吗?

    Java TIMESTAMP 有尾随零,我该如何删除?