嵌套可嵌入 - AttributeOverride可嵌入嵌入 [英] Nested embeddable - AttributeOverride for embeddable within embeddable

查看:126
本文介绍了嵌套可嵌入 - AttributeOverride可嵌入嵌入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有class Money,它是@Embeddable

  @Embeddable 
public class Money实现了Serializable,Comparable<金钱与GT; {
@Column(name =amount,precision = 15,scale = 2)
private BigDecimal amount;
}

当我在实体内使用多次时,一切正常。例如

  @Entity 
公共类SomeEntity实现了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被实体多次使用。示例:


  1. 可嵌入

      @Embeddable 
    public class ReportCostValues implements Serializable {

    @Embedded
    @AttributeOverride(name =amount,column = @Column(name =covered_by_grant))
    私人资金包含在内;

    @Embedded
    @AttributeOverride(name =amount,column = @Column(name =own_resources))
    private Money createdFromOwnResources;

    @Embedded
    @AttributeOverride(name =amount,column = @Column(name =personal_contribution))
    private Money personalContribution;


  2. 实体

      @Entity 
    public class ReportCostEntity implements可识别的< Long> ;,可序列化的{

    @Id
    private Long id;

    @Embedded
    私人ReportCostValues合约;

    @Embedded
    私人ReportCostValues当前;

    @Embedded
    private ReportCostValues previousReport;


以上代码无效。任何想法如何解决这个问题?

解决方案

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

  @Entity 
public class ReportCostEntity implements Serializable {

@Id
private Long id;
$ b @Embedded
@AttributeOverrides({
@AttributeOverride(name =coveredByGrant.amount,column = @Column(name =contracted_coveredByGrant)),
@AttributeOverride(name =ownedContribution.amount,column = @Column(name =contracted_personalContribution)@AttributeOverride(name =foundedFromOwnResources.amount,column = @Column(name =contracted_foundedFromOwnResources)),

})
私人ReportCostValues合约;
$ b @Embedded
@AttributeOverrides({
@AttributeOverride(name =coveredByGrant.amount,column = @Column(name =current_coveredByGrant)),
@AttributeOverride(name =discoveredFromOwnResources.amount,column = @Column(name =current_foundedFromOwnResources)),
@AttributeOverride(name =personalContribution.amount,column = @Column(name =current_personalContribution)) )
})
私人ReportCostValues当前;
$ b @Embedded
@AttributeOverrides({
@AttributeOverride(name =coveredByGrant.amount,column = @Column(name =previousReport_coveredByGrant)),
@AttributeOverride(name =ownedContribution.amount,column = @Column(name =previousReport_personalContribution)@AttributeOverride(name =foundedFromOwnResources.amount,column = @Column(name =previousReport_foundedFromOwnResources)),

})
private ReportCostValues previousReport;



$ b}

希望这有助于!!!!!

I have class Money which is an @Embeddable

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

When I useit multiple time inside entity, everything works fine. For example

@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;
}

Code above works perfectly.

Now the problem occurs when I have another @Embeddable that I want to have Money instances in it and that @Embeddable is used by an entity multiple times. Example:

  1. 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;
    

  2. Entity

     @Entity
     public class ReportCostEntity implements Identifiable<Long>, Serializable {
    
        @Id
        private Long id;
    
        @Embedded       
        private ReportCostValues contracted;
    
        @Embedded       
        private ReportCostValues current;
    
        @Embedded        
        private ReportCostValues previousReport;
    

This code above will not work. Any ideas how to approach this problem?

解决方案

Hi you have to use @AttributeOverrides judicially,you have to override attributes once again in entity that you have done in embeddable ReportCostValues class, hope code below is what you are looking for.

@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;




} 

Hope this helps !!!!!

这篇关于嵌套可嵌入 - AttributeOverride可嵌入嵌入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆