我有一个Price对象,包含两个MonetaryValues,其中一个MonetaryValue由金额和货币组成。
如果我以XML方式配置OR映射,我可以这样做
<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,只使用三列。正如Autocracy在他的评论中所暗示的那样,你绝对可以通过继承解决问题。但话说回来,您还可以使用自定义.hbm.xml映射文件而不是使用注释来解决它。我不确定哪个更正确,但我仍然很好奇是否有可能无法解决...
答案 0 :(得分: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;
但是,如果这不是你的意思,你应该澄清更多。我真的不知道你在这里想做什么。