簡體   English   中英

Hibernate XML - 具有一對一映射的復合 ID

[英]Hibernate XML - composite-id with one-to-one mapping

我無法讓它工作。 錯誤說Broken column mapping 它必須是單方面的一對一映射。 復合 ID 的只有一部分連接到另一個實體。 頻道將根據登錄用戶的訪問頻道插入。 我有2節課。

public class UserModel implements Serializable{
    private final Long id;
    private final UserLimitsModel userLimitsModel;

}
public class UserLimitsModel implements Serializable{
    private final Long userId;    
    private final String channel;
}

然后 2 個休眠 .xml 映射

<hibernate-mapping>
    <class name="abcdefgh.UserLimitsModel" table="USER_LIMITS" lazy="false">
        <composite-id>
            <key-property name="userId" type="long">
                <column name="USER_ID" not-null="true"/>
            </key-property>
            <key-property name="channel" type="string" length="20">
                <column name="CHANNEL" not-null="true"/>
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="abcdefgh.UserModel" table="USER" lazy="false">
        <id name="id" type="long">
            <column name="ID" precision="19" scale="0" />
            <generator class="sequence">
                <param name="sequence_name">ID_SEQ</param>
            </generator>
        </id>
        <one-to-one name="userLimitsModel" class="abcdefgh.UserLimitsModel" cascade="all"/>
    </class>
</hibernate-mapping>

所以唯一的連接是UserModel.id = UserLimitsModel.userId ,而通道保持獨立。

嗨,問題是您沒有加入主鍵。 此外,UserModel 中的列名是 ID,而 UserLimitsModel 中的列名是 USER_ID。 您需要告訴 hibernate 如何執行連接,您可以通過在一對一元素上定義 property-ref 來做到這一點。

<one-to-one name="userLimitsModel" class="abcdefgh.UserLimitsModel" property-ref="userId" cascade="all"/>

property-ref(可選):關聯類的屬性的名稱,該類的屬性與此類的主鍵相連。 如果未指定,則使用關聯類的主鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM