2012-03-23 37 views
13

Tôi có tiền lớp mà là một @EmbeddableNested nhúng - AttributeOverride cho nhúng trong nhúng

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

Khi tôi useit nhiều thời gian bên trong tổ chức nào, tất cả mọi thứ hoạt động tốt. Ví dụ:

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

Quy tắc trên hoạt động hoàn hảo.

Bây giờ vấn đề xảy ra khi tôi có @Embeddable khác mà tôi muốn có trường hợp Tiền trong đó và @Embeddable được sử dụng bởi một thực thể nhiều lần. Ví dụ:

  1. nhúng

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

Mã này trên sẽ không làm việc. Bất kỳ ý tưởng làm thế nào để tiếp cận vấn đề này?

Trả lời

25

Xin chào, bạn phải sử dụng @AttributeOverrides về mặt pháp lý, bạn phải ghi đè thuộc tính một lần nữa trong thực thể mà bạn đã thực hiện trong lớp học ReportCostValues có thể nhúng được, hy vọng mã bên dưới là những gì bạn đang tìm kiếm.

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




} 

Hy vọng điều này sẽ giúp !!!!!

+0

nó hoạt động, cảm ơn bạn rất nhiều! –

+0

@PaulSzulc bạn được chào đón –