2012-03-23 21 views
13

एम्बेड होने के लिए AttributeOverride मैं कक्षा मनी जो एक @Embeddableनेस्टेड एम्बेड करने योग्य - के साथ एम्बेड

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

है जब मैं एक से अधिक समय इकाई के अंदर, सब कुछ ठीक काम करता है useit है। उदाहरण के लिए

@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 है जिसमें मैं इसमें धन के उदाहरण रखना चाहता हूं और @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

नमस्ते आपको @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; 




} 

उम्मीद है कि यह मदद करता है !!!!!

+0

यह काम किया, बहुत बहुत धन्यवाद! –

+0

@PaulSzulc आपका स्वागत है –

संबंधित मुद्दे