«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как определить отношения с аннотациями в Hibernate 4 с помощью Spring?

Как определить отношения с аннотациями в Hibernate 4 с помощью Spring?

Опубликовано 17 ноября 2024 г.
Просматривать:133

How to Define Relationships with Annotations in Hibernate 4 using Spring?

Определение связей с аннотациями в Hibernate 4 с использованием Spring

Чтобы реализовать различные типы отношений с использованием аннотаций в Hibernate 4 для предоставленных классов, Foo и Бар, давайте углубимся в детали.

Однонаправленная связь «один ко многим»:

Настройте класс Foo с помощью аннотации @OneToMany и списка недвижимость. Оставьте класс Bar без изменений. Это устанавливает связь «один-ко-многим», при которой Foo может иметь несколько связанных объектов Bar, но Bar не может ссылаться обратно на Foo.

Двунаправленная связь «один-ко-многим» (управляется Foo.class ):

Используйте аннотацию @OneToOne с cascade = CascadeType.ALL в Foo.class. Добавьте аннотацию @JoinColumn, указывающую столбец в Bar.class, который следует использовать для соединения. Для Bar.class используйте аннотацию @OneToOne и укажите mappedBy = "bar", чтобы указать, что связь управляется Foo.class.

Однонаправленная связь «один ко многим» с использованием User- управляемая таблица объединения:

Используйте аннотацию @OneToMany с аннотацией @JoinTable, чтобы указать отдельную таблицу объединения. Определите объединяемые столбцы с помощью аннотаций @JoinColumn с обеих сторон. При необходимости используйте дополнительный класс для представления объединяемой таблицы.

Двунаправленная связь «один ко многим» с использованием сопоставления внешнего ключа:

В Foo.class, используйте @OneToMany(mappedBy = "bar"), чтобы отобразить взаимосвязь. В Bar.class используйте @ManyToOne(cascade = { CascadeTyep.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) с аннотацией @JoinColumn.

Двунаправленное соединение «многие ко многим» с использованием Hibernate -управляемая таблица соединений:

Используйте @ManyToMany как для Foo.class, так и для Bar.class, а также используйте аннотацию @JoinTable для таблицы соединения, указав столбцы соединения.

Двунаправленная связь «многие-ко-многим» с использованием управляемого пользователем объекта таблицы соединений:

Подобно примеру однонаправленной связи «один-ко-многим», используйте @OneToMany с аннотацией @JoinTable. Создайте отдельный класс для представления объединяемой таблицы и сопоставьте отношения как с Foo.class, так и с Bar.class, используя @ManyToOne.

Определение типа выборки:

Используйте fetchType .LAZY для задержки загрузки связанных коллекций до тех пор, пока к ним не будет получен доступ. Используйте fetchType.EAGER для немедленной загрузки коллекции, но учтите, что это может повлиять на производительность. Рассмотрите возможность использования Hibernate.initialize() в классе Service для ручной инициализации лениво загружаемых коллекций для конкретных случаев использования.

Определение направления каскада:

Используйте аннотацию @Cascade, чтобы указать параметры каскадирования. Как правило, каскадные изменения происходят в направлении отношений владения. Избегайте каскадного обновления или удаления от дочернего элемента к родительскому, если это не имеет смысла в контексте приложения.

Удаление потерянных файлов:

Задайте orphanRemoval = true для Аннотация @OneToMany, позволяющая Hibernate автоматически удалять потерянные объекты (т. е. те, которые не связаны ни с каким другим родительским объектом), когда они удаляются из коллекции родительского объекта.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3