2009-05-22 7 views
4

私は、1つのMonetaryValueが金額と通貨で構成される2つのMonetaryValuesからなるPriceオブジェクトを持っています。コンポーネントのどのメンバを永続化するかを指定するHibernateアノテーション

私はXML-道をORマッピングする設定した場合、私は(それは暗黙的と常に同じであるため)、すなわちbaseCurrency要素を保持しないことを選択し、この

<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属性を省略した場合、それはとにかくデフォルトの名前で永続化されます。

@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が示唆しているように、3つの列のみを使用して、2つのMonetaryValueをaテーブルに格納したいとします。 Autocracyが彼のコメントで示唆するように、あなたは確かに継承の問題を解決することができます。しかし、もう一度、アノテーションを使用する代わりにカスタム.hbm.xmlマッピングファイルを使用して解決することもできます。私はもっ​​と正しいとは確信していませんが、私はまだ好奇心を持っています。どちらも解決できない場合、私はまだ興味があります...

答えて

3

私はまだあなたの質問で混乱していますが、それを更新することなくbaseCurrencyを読み込もうとしていますか?それはあなたが何を意味するかではない場合は、しかし、より多くのを明確にすべき

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

:に結果の

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

。私はあなたがここで何をしようとしているのか本当に分かりません。

+0

彼は実体で2つのMonetaryValueオブジェクトを埋め込むしようとしているが、唯一の3つの列が持続している - baseAmount(baseAmountフィールドから)とoriginalAmountとoriginalCurrency(originalAmountフィールドから) – mtpettyp

+0

まあちょうど彼がしたほうが良いと思いますようにそれが聞こえること複数のクラスと継承を持ちます。永続性のクラスを1つ作成し、それを表示/表示する2つのクラスを作成します。私はまだ実装を取得していません... –

+0

mtpettypは私が何をしているかについて正しいです。私は単純にデータベースからbaseCurrencyの情報を取り除きたいと思っています。これは、システム全体のデフォルトと定数です。これを解決するには継承が最善の方法ですか? "MonetaryValue"と "FixedCurrencyMonetaryValue extends MoneteryValue"?それとも別の方法ですか? –

関連する問題