2015-07-28 87 views
1

可嵌入Money類中存在面額字段。@AttributeOverride - 繼承一些屬性作爲默認值

@Column(scale = 4, precision = 20) 
private BigDecimal denomination; 

當我在一些實體類使用Money類幾次,我不得不重寫通過@AttributeOverride註解列名。

@Embedded 
@AttributeOverrides({ 
    @AttributeOverride(name = "denomination", column = @Column(name = "premium_amount")), 
    @AttributeOverride(name = "currencyCode", column = @Column(name = "premium_amount_currency")) }) 
private Money premium; 

@Embedded 
@AttributeOverrides({ 
    @AttributeOverride(name = "denomination", column = @Column(name = "discount_amount")), 
    @AttributeOverride(name = "currencyCode", column = @Column(name = "discount_amount_currency")) }) 
private Money discount; 

這種方式也覆蓋(scale = 4,precision = 20)屬性爲默認值。是否有可能默認繼承這些屬性,或者我必須每次指定它們?

回答

1

不幸的是,這是不可能的。

它與JPA無關,但帶有註釋: 如果您在運行時期間評估註釋, Column.scale(),你不能分辨某人是否明確地設置了屬性的值,或者是否沒有包含在聲明中。

因此從JPA提供者的角度來看,兩個定義是相同的:@Column()@Column(scale = 0, precision = 0)。由於供應商無法區分兩種定義,因此它將始終使用從scale()返回的值 - 在您的情況下,默認值爲0。所以你必須明確地設置這些值 - 或者使用一些代碼生成工具來自動導出適當的註釋(雖然我不知道哪一個會開箱即可)。

+0

Got it!感謝您的詳細解答) – MarkHunt