【问题标题】:Map Hibernate Column in Many-To-One Mapping and as a Property在多对一映射中映射 Hibernate 列并作为属性
【发布时间】:2015-11-19 14:57:33
【问题描述】:

在我的 DeviceAttributes.hbm.xml 文件中,我想要执行以下操作:

    <property
    name="deviceId"
    type="java.lang.String"
    not-null="true"
    column="DeviceID"
    unique="true"
    length="32">
    <meta attribute="field-description">
        @hibernate.property
        column="DeviceID"
        unique="true"
        length="32"
        not-null="true"
    </meta>
</property>

<many-to-one 
    name="device" 
    class="Device" 
    not-null="false" 
    property-ref="deviceId">
    <meta attribute="field-description">
        @hibernate.many-to-one
        not-null="true"
        @hibernate.column name="DeviceID"
    </meta>
    <column name="DeviceID" />
</many-to-one>

但我得到了错误:

实体映射中的重复列:DeviceAttributes 列: DeviceID(应该用 insert="false" update="false" 映射)

我知道我收到此错误是因为我将“DeviceID”列映射了两次;一次在“属性”标签中,一次在“多对一”标签中。

有没有办法可以将“DeviceID”列映射到 JavaBean 属性并使用它来连接两个表?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    如果您决定使用 ORM 和对象,那么为什么您仍然希望将 deviceId 而不是 device 映射为多对一?您可以随时以deviceAttribute.getDevice().getId() 访问deviceId 字段。 如果您仍然需要两次映射设备,您应该决定使用哪一个来写入设备属性,然后在其中一个设备字段映射中添加insert="false" update="false" 属性。

    【讨论】:

    • 谢谢。我将insert="false" update="false" 添加到&lt;many-to-one&gt; 映射中。这样我就可以直接更新记录的DeviceID属性了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多