Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate child parent / 5 сообщений из 5, страница 1 из 1
16.04.2016, 02:30
    #39217018
TepKuH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate child parent
Есть две сущности (упрощёны для понимания)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
@Entity
public class EventEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "title")
    private String title;

    @OneToMany(fetch = FetchType.EAGER)
    @JoinColumn(name="event_id")
    private Set<EventLectureEntity> eventLecture;
}

@Entity
public class EventLectureEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "event_id")
    private Integer eventId;

   @Column(name = "description")
    private String desc;
}





Вполне очевидно и понятно, что если я заполню поля id, title и НЕ заполню поле eventLecture у сущности EventEntity и потом скажу merge\updateу меня случится апдейт всех child'ов т.е. И в поле event_id проставляться NULL.

Мой вопрос в следующем:
Можно ли какими либо аннотациями(или еще какими то способами) запретить обновлять связанную сущность EventLectureEntity , но разрешить INSERT'ить и SELECT'ить?
...
Рейтинг: 0 / 0
16.04.2016, 08:15
    #39217046
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate child parent
TepKuH,
из декларативного принуждения ничего не память приходит, но можно отлавливать в сущности событие
beforeUpdate и абортироваться в нем
...
Рейтинг: 0 / 0
16.04.2016, 20:57
    #39217349
TepKuH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate child parent
Мне тоже умного ничего не приходит. Кроме как:
- В контроллер приходит сущность EventEntity с рядом не заполненных полей.
- Контроллер дальше прокидывает в сервис, который вытаскивает из базы по ID эту EventEntity
- Котроллер обновляет поля сущности которую он вытащил и обновляет поля которые не NULL.

Но проблема в том, что у меня у этой сущность EventEntity около 40 полей. (это так и должно быть, большинство полей текстовые) и только штук 10 связаны со простыми справочниками.
Это так и устать можно заполнять поля :) А разработчики люди ленивые :)
...
Рейтинг: 0 / 0
16.04.2016, 22:51
    #39217422
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate child parent
TepKuH,
самый простой ну и самый наверное расточительный это отиметь EventLectureEntity через interceptor или что там еще есть
preupdateeventlistener и пробрасывать в штатном режиме EventLectureEntity объекты на обновление , а так как реализация будет возвращать false обновления не должно быть..
...
Рейтинг: 0 / 0
18.04.2016, 13:57
    #39218131
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate child parent
1) поле EventLectureEntity.eventId - лишнее. Всё, что нужно, уже описано в аннотации
Код: java
1.
@JoinColumn(name="event_id")


2) в аннотации @ManyToOne следует использовать атрибут "cascade", либо хибернейтовский @Cascade
Код: java
1.
@OneToMany(cascade=CascadeType.PERSIST)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate child parent / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]