我有一个由两个 MonetaryValues 组成的 Price 对象,其中一个 MonetaryValue 由一个金额和一个货币组成。
如果我配置 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 的属性货币成为 transient ,因为它永远不会被保存。
那么,是否有可能通过注释来实现上述 XML 映射的作用?
正如 mtpettyp 所建议的那样,我想在一个表中存储两个 MonetaryValue,只使用三列。正如专制在他的评论中所暗示的那样,您绝对可以通过继承来解决问题。但话又说回来,您也可以使用自定义 .hbm.xml 映射文件而不是使用注释来解决它。我不确定哪个更正确,但我仍然很好奇是否可以用任何一个来解决......
最佳答案
我仍然对你的问题感到困惑,但我会猜测你正在尝试读取 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;
不过,如果这不是你的意思,你应该澄清更多。我真的不知道你想在这里做什么。
关于java - Hibernate Annotations,指定组件的哪些成员要持久化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/897678/