0..N我有一个表的用户映射两个表中的休眠
CREATE TABLE "USERS" (
"ID" NUMBER NOT NULL ,
"LOGINNAME" VARCHAR2 (150) NOT NULL)
和我有一个第二表SpecialUsers。 SpecialUsers表中不会出现两次UserId,并且SpecialUsers表中仅包含用户表中的一小部分用户ID。
CREATE TABLE "SPECIALUSERS" (
"USERID" NUMBER NOT NULL,
CONSTRAINT "PK_SPECIALUSERS" PRIMARY KEY ("USERID"))
ALTER TABLE "SPECIALUSERS" ADD CONSTRAINT "FK_SPECIALUSERS_USERID" FOREIGN KEY ("USERID")
REFERENCES "USERS" ("ID")
/
映射在Hibernate中用户表工作正常
<hibernate-mapping package="com.initech.domain">
<class name="com.initech.User" table="USERS">
<id name="id" column="ID" type="java.lang.Long">
<meta attribute="use-in-tostring">true</meta>
<generator class="sequence">
<param name="sequence">SEQ_USERS_ID</param>
</generator>
</id>
<property name="loginName" column="LOGINNAME" type="java.lang.String" not-null="true">
<meta attribute="use-in-tostring">true</meta>
</property>
</class>
</hibernate-mapping>
但我创造了SpecialUsers表中的映射挣扎。 Internet上的所有示例(例如Hibernate文档中)都没有这种类型的自引用。我想这样的映射:
<hibernate-mapping package="com.initech.domain">
<class name="com.initech.User" table="SPECIALUSERS">
<id name="id" column="USERID">
<meta attribute="use-in-tostring">true</meta>
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<one-to-one name="user" class="User"/>
</class>
</hibernate-mapping>
,但得到的错误
Invocation of init method failed; nested exception is org.hibernate.DuplicateMappingException:
Duplicate class/entity mapping com.initech.User
我应该如何映射SpecialUsers表?我在应用程序级别上需要的是SpecialUsers表中包含的用户对象列表。
为什么不在USERS表中添加一个'特殊'字段? – 2010-02-24 15:23:50
我认为,但考虑到很少有“特殊”用户(目前是一个)和很多用户,这看起来并不正确。长期来看,它还会使用户表不清楚是否每个小型资产(仅适用于一小部分用户)会直接添加到用户表中。还有一个原因是,如果“特殊”用户在未来应该拥有更多与他们“特殊性”相关的属性,则很容易扩展SpecialUsers表。 – simon 2010-02-24 15:32:26
为什么你认为某处存在0..n关系?你的物理模型没有反映出来,它代表了纯粹的父子层次结构(即继承)。我错过了什么吗? – 2010-02-24 18:00:24