У нас проблема с отображением «один ко многим» с помощью свойства ref. Мы получаем ClassCastException, потому что тип столбца property-ref не совпадает с типом PK. Похоже, это известная проблема с поиском в Google. Буду признателен за любую информацию об обходном пути или лучший способ сделать это отображение.
Справочная информация:
- 3 таблицы Account, User, UserAccount; Отношения один-ко-многим между Пользователем и Аккаунтом
- Присоединение к таблице UserAccount имеет полный первичный ключ пользователя и часть первичного ключа учетной записи.
- Отображение один-ко-многим для пользователя с учетной записью пользователя, которая работает, как и ожидалось
- Атрибут Property-ref для моделирования отношений между UserAccount и Account.
- Найдена следующая ошибка JIRA, указывающая, что другие люди испытывают ту же проблему с помощью свойства-ref: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2052
Я использую следующие файлы сопоставления.
Счет
<class name="com.model.Account" table="Account">
<composite-id class="com.model.VersionId"
mapped="false" name="id">
<key-property column="entity_id" name="entityId" type="java.lang.Long" />
<key-property column="entity_vers" name="version" type="java.lang.Long" />
</composite-id>
<property column="entity_id" name="entityId"
type="java.lang.Long" insert="false" update="false" />
<set name="userAccounts" cascade="none">
<key column="entity_id" property-ref="entityId"/>
<many-to-many class="com.model.UserAccount" column="acct_entity_id" property-ref="accountId"/>
</set>
</class>
Пользователь
<class name="com.model.User" table="User">
<composite-id class="com.model.VersionId"
mapped="false" name="id">
<key-property column="entity_id" name="entityId" type="java.lang.Long" />
<key-property column="entity_vers" name="version" type="java.lang.Long" />
</composite-id>
<property column="user_name" length="255" name="name"
type="java.lang.String" />
<set name="userAccounts" table="UserAccount">
<key>
<column name="entity_id" />
<column name="entity_vers" />
</key>
<one-to-many class="com.model.UserAccount" />
</set>
</class>
учетная_запись_пользователь
<class name="com.model.UserAccount"
table="UserAccount">
<composite-id class="com.model.UserAccountId"
mapped="false" name="id">
<key-property column="entity_id" name="userId" type="java.lang.Long" />
<key-property column="acct_entity_id" name="accountId"
type="java.lang.Long" />
<key-property column="entity_vers" name="userVersion"
type="java.lang.Long" />
</composite-id>
<property column="acct_entity_id" name="accountId"
type="java.lang.Long" insert="false" update="false"></property>
<many-to-one name="user"
class="com.model.User" insert="false"
update="false">
<column name="entity_id" />
<column name="entity_vers" />
</many-to-one>
<set name="accounts" cascade="none">
<key column="acct_entity_id" property-ref="acountId"/>
<many-to-many class="com.model.Account" column="entity_id" property-ref="entityId"/>
</set>
</class>
Спасибо