В моем текущем проекте мне нужно сопоставить устаревшую базу данных с помощью hibernate, но у меня возникают некоторые проблемы.
База данных настраивается с использованием одной таблицы «сущностей», которая содержит общие свойства для всех объектов домена. Свойства включают (среди прочего) дату создания, владельца (пользователя) и первичный ключ, который впоследствии используется в таблицах для объектов домена.
Простое представление контекста таково:
table entity
- int id
- varchar owner
table account
- int accountid (references entity.id)
table contact
- int contactid (references entity.id)
- int accountid (references account.accountid)
Моя проблема проявляется, когда я пытаюсь добавить сопоставление коллекции в сопоставление своей учетной записи, содержащее все контакты, принадлежащие этой учетной записи. Мои попытки сводятся к следующему:
<hibernate-mapping>
<class name="Contact" table="entity">
<id name="id" column="id">
<generator class="native" />
</id>
<join table="contact">
<key column="contactid"/>
<!-- more stuff -->
</join>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="Account" table="entity">
<id name="id" column="id">
<generator class="native" />
</id>
<bag name="contacts" table="contact">
<key column="accountid" />
<one-to-many class="Contact"/>
</bag>
<join table="account">
<key column="accountid"/>
<!-- more stuff -->
</join>
</class>
</hibernate-mapping>
Однако, когда я пытаюсь получить учетную запись, я получаю ошибку SQL, утверждающую, что таблица сущностей не содержит столбец с именем accountid. Я понимаю, почему это происходит: сопоставление пытается найти столбец accountid в таблице сущностей, когда я хочу, чтобы он смотрел в таблице контактов. Я что-то упускаю здесь очевидное, или я должен подойти к этой проблеме с другой стороны?