2012-03-23 13 views
13

habe ich Klasse Geld, das ist ein @EmbeddableNested embeddable - AttributeOverride für integrierbare innerhalb embeddable

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

Wenn ich mehrere Mal innerhalb Einheit USEIT, funktioniert alles einwandfrei. Zum Beispiel

@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 oben funktioniert perfekt.

Jetzt tritt das Problem auf, wenn ich ein anderes @Embeddable habe, dass ich Money-Instanzen darin haben möchte und dass @Embeddable von einer Entität mehrere Male benutzt wird. Beispiel:

  1. Fähiges

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

Dieser Code oben wird nicht funktionieren. Irgendwelche Ideen, wie man dieses Problem angeht?

Antwort

25

Hallo, Sie müssen @AttributeOverrides gerichtlich verwenden, müssen Sie Attribute noch einmal in Entität überschreiben, die Sie in embeddable ReportCostValues Klasse getan haben, hoffe Code unten ist, was Sie suchen.

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




} 

Hoffe, das hilft !!!!!

+0

es hat funktioniert, vielen Dank! –

+0

@PaulSzulc Sie sind willkommen –

Verwandte Themen