在多对一映射中映射Hibernate列并作为属性

时间:2015-11-19 01:44:37

标签: java hibernate

在我的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”映射了两次;一次在“property”标签中,一次在“many-to-one”标签中。

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

1 个答案:

答案 0 :(得分:2)

如果您决定使用ORM和对象,那么为什么您仍然希望仅将device而不是deviceId映射为多对一?您可以随时deviceAttribute.getDevice().getId()访问insert="false" update="false"字段。 如果您仍需要两次地图设备,则应确定将用于编写设备属性的那个,然后在设备字段映射之一中添加{{1}}属性。