Генерация классов Hibernate POJO - PullRequest
2 голосов
/ 29 ноября 2011

Я генерирую hibernate pojo классы с аннотациями из существующих таблиц, используя Ant Script Я застрял с проблемой. Проблема в том, что у меня есть два класса Person и Address. Между этими двумя классами существует сопоставление OneToMany.

Сгенерированные классы содержат:

//Person.java
@OneToMany(fetch=FetchType.LAZY)
public Set<Address> getAddresses()
{
    return addresses;
}
public void setAddresses(Set<Address> addresses)
{
    this.addresses=addresses;
}

//Address.java
@OneToMany(fetch=FetchType.LAZY)
public Person getPerson()
{
     return person;
}
public void setPerson(Person person)
{
     this.person=person;
}

У меня возникла ситуация, когда я не хочу генерировать набор адресов. Есть ли способ генерировать POJO без набора. т.е. чтобы избежать обратного отображения. Пожалуйста помоги. Заранее спасибо.

1 Ответ

1 голос
/ 29 ноября 2011

Я делаю предположение здесь, но я думаю, что вы используете Hibernate Tools для Ant для генерации классов сущностей.Эти инструменты (насколько я помню) генерируют классы на основе XML-файлов отображения Hibernate (hbm.xml).

Я создаю классы pojo hibernate с аннотациями из существующих таблиц с использованием Ant Script.Я застрял с проблемой.Проблема в том, что у меня есть два класса Person и Address.Между этими двумя классами существует сопоставление OneToMany .

Вы сказали, что Person и Address класс, которые являются или, по крайней мере,должно быть, отображения таблиц в вашей базе данных находятся в отношении 1: N .(Один человек может иметь несколько адресов, в то время как адрес может принадлежать только одному человеку.) Таким образом, у вас должны быть Person.hbm.xml и Address.hbm.xml файл где-то вокруг.Это означает, что если ваши файлы сопоставления верны, то Hibernate Tools будет генерировать поле Set (с использованием метода получения и установки), потому что именно так оно и работает.

Я не активный пользователь этого инструмента, но, как я вижу, у вас есть следующие варианты:

  1. Измените ваши таблицы (и сопоставления) так, чтобы Person и Address были в Соотношение 1: 1 (не очень круто).
  2. Если вы хотите ограничить использование клиентами getAddresses и setAddresses , тогда вы можетеизменить сгенерированные методы видимости.См. Раздел Справочного руководства по инструментам Hibernate по Управление генерацией кода POJO (особенно подраздел по атрибутам meta ).

(Я действительно немного знаю об инструментах Hibernate, поэтому, возможно, можно полностью опустить рассматриваемые методы с помощью некоторой конфигурации, но, тем не менее, было бы действительно неуместно делать это.)

...