Hibernate - Как сохранить только родителя, оставив детей такими, какие они есть - PullRequest
8 голосов
/ 16 августа 2011

Может кто-нибудь помочь мне понять, как настроить спящий режим, чтобы делать то, что я хочу.

У меня есть родительская сущность "Квартира" со списком "Комната" как дети. У меня есть форма для редактирования «Квартир», и в этой форме я перечислил все детские «Комнаты» только для ознакомительных целей. Номера добавляются и редактируются в отдельной форме.

Так как я перечисляю комнаты в форме квартиры, я установил для lazyloading значение false:

    @OneToMany
@JoinColumn (name = "appartmentId")
@LazyCollection (LazyCollectionOption.FALSE)
private List<Room> room;

Но если я отредактирую квартиру и сохраню ее, все комнаты квартир внезапно исчезнут. В базе данных они не удаляются, а разыменовываются (как в appartmentId = null).

Так как я могу настроить hibernate, чтобы сохранить только мой Appartment-объект. А вообще не трогать детей?

Это мое действие сохранения:

public String save() throws Exception {
    boolean isNew = (appartment.getAppartmentId() == null);

    appartment = appartmentManager.save(appartment);

    String key = (isNew) ? "appartment.added" : "appartment.updated";
    saveMessage(getText(key));

    return SUCCESS;
}

Ответы [ 3 ]

8 голосов
/ 16 августа 2011

Это действительно просто. Нет необходимости заселять своих детей или создавать отдельные DTO.

Если вы никогда не собираетесь сохранять детей, просто добавьте вставляемый = false, updatable = false к аннотации joincolumn. Как это:

@OneToMany
@JoinColumn (name = "appartmentId", insertable = false, updatable = false)
@Fetch(value = FetchMode.JOIN)
private List<Room> room;
1 голос
/ 16 августа 2011
  1. Не отключайте ленивую выборку в отображении.Используйте стратегии извлечения для настройки производительности.
  2. Hibernate удалит комнаты из квартиры, только если вы скажете сохранить / обновить квартиру, в которой нет комнат.
0 голосов
/ 16 августа 2011

Вместо использования постоянных сущностей, рассмотрите возможность использования DTO (вы можете назвать их моделью страницы в случае веб-страниц). Они могут дать вам гибкость, чтобы изобразить информацию, которую вы хотите, и показать ее в нужном вам формате. Но вы должны заплатить за это - вы добавляете новые классы в вашу систему, и вы должны придумать способ преобразования сущностей в DTO и обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...