我有一个由两个 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/

10-11 01:12