嵌套可嵌入 - AttributeOverride可嵌入嵌入 [英] Nested embeddable - AttributeOverride for embeddable within embeddable
问题描述
我有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被实体多次使用。示例:
-
可嵌入
@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;
-
实体
@Entity
public class ReportCostEntity implements可识别的< Long> ;,可序列化的{
@Id
private Long id;
@Embedded
私人ReportCostValues合约;
@Embedded
私人ReportCostValues当前;
@Embedded
private ReportCostValues previousReport;
以上代码无效。任何想法如何解决这个问题?
您好,您必须使用 @AttributeOverrides
在司法上,你必须在实体中重新覆盖属性,你可以嵌入 ReportCostValues
类,希望下面的代码是你正在寻找的。 p>
@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:
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;
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屋!