Привет, эксперты по переполнению стека, мне нужен ваш опыт:
Я пытаюсь использовать Hibernate на существующей базе данных.
В настоящее время я пытаюсь загрузить объект User и список объектов UserData, которые идут вместе.
в БД (упрощенная) компоновка
| User | | UserData |
---------------- -----------------------------------
uid | username | | uid | parentuid | field | value |
Таким образом, каждый объект User соответствует всем объектам UserData, где UserData.parentuid = User.uid.
Файл сопоставления классов My User
<class name="com.agetor.commons.security.User" table="ac_users">
<id name="uid" column="uid" type="long" >
<!--<generator class="native"/>-->
</id>
<property name="username" column="username" />
<list name="fieldData" cascade="all">
<key column="parentuid" not-null="true" />
<index column="parentuid" />
<one-to-many class="com.agetor.commons.fields.FieldData"/>
</list>
</class>
Файл отображения пользовательских данных Mu
<class name="com.agetor.commons.fields.FieldData" table="ac_userdef_data">
<id name="uid" column="uid" type="long" >
<!--<generator class="native"/> -->
</id>
<!--<property name="parentuid" column="parentuid" /> -->
<property name="fieldname" column="fieldname" />
<property name="value" column="value" />
</class>
До сих пор я пробовал много разных конфигураций, и все они имели различные степени отказа. Код, вставленный сюда, не работает.
- Свойство parentuid закомментировано, поскольку в противном случае Hibernate выдает ошибку «Repeated column in mapping».
- В настоящее время в поле uid все еще есть «Повторяющийся столбец в отображении», я использую для
<list-index />
- Я не понимаю, где я указываю, что UserData.parentuid является внешним ключом и что список должен использовать User.uid в качестве ключа.
Надеюсь, кто-то сможет помочь.
Когда вы определяете и «один ко многим», и «многие к одному», разве это не делает его двунаправленным?
Текущая рабочая модель является однонаправленной, а UserData не имеет ссылки на пользователя. Ваше предложение не выполнено, поскольку Hibernate не смог найти метод get или set для User в UserData.
Подразумевается ли, что этот код использует User.uid в качестве ключа и сопоставляет его со столбцом UserData.parentuid? Или этот факт указан где-то еще?
<list name="fieldData" inverse="true">
<key column="parentuid" not-null="true" />
<one-to-many class="com.agetor.commons.fields.FieldData"/>
</list>
Я все еще изучаю Hibernate и прорабатываю документацию и примеры, которые могу найти.