我无法使用它。错误显示Broken column mapping
。它必须是单面的一对一映射。只有Composite-id的一部分与另一个实体连接。频道将根据登录用户的访问频道进行插入。我有两节课。
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
,而通道保持独立。
答案 0 :(得分:0)
您好,问题是您没有使用主键加入。此外,UserModel中的列名称为ID,而UserLimitsModel中的列名称为USER_ID。您需要告诉休眠方式如何执行联接 您可以通过在一对一元素上定义property-ref来实现。
<one-to-one name="userLimitsModel" class="abcdefgh.UserLimitsModel" property-ref="userId" cascade="all"/>
property-ref(可选):关联的属性的名称 连接到此类的主键的类。如果不 指定后,将使用关联类的主键。