【发布时间】:2010-10-28 05:09:26
【问题描述】:
我有一个 Price 对象,其中包含两个 MonetaryValue,其中一个 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 映射文件而不是使用注释来解决它。我不确定哪个更正确,但我仍然很好奇是否可以解决这两个问题......
【问题讨论】:
标签: java hibernate annotations