2009-05-22 55 views
4

我有一個Price對象,由兩個MonetaryValues組成,其中一個MonetaryValue由一個金額和一個貨幣組成。Hibernate註釋,指定要持久化的組件的哪些成員

如果我配置OR映射的XML的方式,我可以做到這一點

<component name="baseAmount" lazy="false" class="MonetartyValue"> 
     <property name="amount" column="baseAmount" precision="20" scale="2" not-null="true" /> 
     <!-- <property name="currency" column="baseCurrency" not-null="true" /> --> 
    </component> 

    <component name="originalAmount" lazy="false" class="MonetaryValue"> 
     <property name="amount" column="originalAmount" precision="20" scale="2" not-null="true" /> 
     <property name="currency" column="originalCurrency" not-null="true" /> 
    </component> 

即選擇不來持久baseCurrency元素(因爲它是隱含的,總是相同的)。

是否有可能以註釋配置的方式實現這一點?


如果我只是做這樣的,並離開了baseCurrency屬性,它總要被堅持着,具有默認名稱。

@Embedded 
@AttributeOverrides ({ 
    @AttributeOverride(name="amount", column= @Column(name="baseAmount")) 
}) 
private MonetaryValue baseAmount; 

@Embedded 
@AttributeOverrides ({ 
    @AttributeOverride(name="amount", column= @Column(name="originalAmount")), 
    @AttributeOverride(name="currency", column= @Column(name="originalCurrency")) 
}) 
private MonetaryValue originalAmount; 

它也不可能使MonetaryValue短暫的財產的貨幣,因爲那將永遠不會被保存。

那麼,是否有可能通過註釋來實現上述XML映射呢?


正如mtpettyp建議,我想存儲兩個MonetaryValue在一個表,只用三列。正如專家在他的評論中所暗示的那樣,你完全可以通過繼承來解決問題。但是,再次,您也可以使用自定義的.hbm.xml映射文件來解決此問題,而不是使用註釋。我不確定哪一個更準確,但我仍然好奇是否可以用兩種方法解決...

回答

3

我仍然對你的問題感到困惑,但我會用猜測來回答你正在嘗試閱讀baseCurrency而不更新它?

// Use this in the override statement for your first baseCurrency 
@Column(insertable=false,updatable=false) 

,導致:

@Embedded 
@AttributeOverrides ({ 
     @AttributeOverride(name="amount", column= @Column(name="baseAmount")) 
     @AttributeOverride(name="currency", column= @Column(name="baseCurrency", insertable=false,updatable=false)) 
}) 
private MonetaryValue baseAmount; 

@Embedded 
@AttributeOverrides ({ 
     @AttributeOverride(name="amount", column= @Column(name="originalAmount")), 
     @AttributeOverride(name="currency", column= @Column(name="originalCurrency")) 
}) 
private MonetaryValue originalAmount; 

你應該更清楚,不過,如果這不是你的意思。我真的不知道你在這裏做什麼。

+0

他試圖在他的實體中嵌入兩個MonetaryValue對象,但只保留三列 - baseAmount(來自baseAmount字段)以及originalAmount和originalCurrency(來自originalAmount字段) – mtpettyp 2009-05-22 18:11:58