2012-03-23 2 views
13
임베드

내에서 임베드에 대한 AttributeOverride은 내가 개체 내에서, 모든 것이 잘 작동 여러 시간을 useit 때 @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; 
} 

위의 코드는 완벽하게 작동합니다.

이제 Money 인스턴스가 있고 @Embeddable이 엔티티에서 여러 번 사용되는 다른 @Embeddable이있을 때 문제가 발생합니다. 예 :

  1. 포함 가능한

    @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 
    public class ReportCostEntity implements Identifiable<Long>, Serializable { 
    
        @Id 
        private Long id; 
    
        @Embedded  
        private ReportCostValues contracted; 
    
        @Embedded  
        private ReportCostValues current; 
    
        @Embedded   
        private ReportCostValues previousReport; 
    

이 코드는 위의 작동하지 않습니다. 어떤 아이디어이 문제에 접근하는 방법?

답변

25

안녕하세요 당신은 사법적으로 사용해야합니다, 당신은 embeddable 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; 




} 

희망이 도움이 !!!!!

+0

정말 고마워요! –

+0

@PaulSzulc 당신을 환영합니다. –