У меня есть таблица Пользователи
CREATE TABLE "USERS" (
"ID" NUMBER NOT NULL ,
"LOGINNAME" VARCHAR2 (150) NOT NULL )
и у меня есть вторая таблица SpecialUsers. Никакой UserId не может встречаться дважды в таблице SpecialUsers, и только небольшая часть идентификаторов пользователей в таблице Users содержится в таблице SpecialUsers.
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")
/
Отображение таблицы Users в 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. Все примеры (например, в документации 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? Что мне нужно на уровне приложения, так это список объектов User, содержащихся в таблице SpecialUsers.