Могу ли я использовать шаблон проектирования компоновщика вместе с Hibernate? - PullRequest
8 голосов
/ 17 января 2011

Предполагая, что у меня есть этот класс:

public class MyEntity {
  private int id;
  private String name;
  private MyEntity(int id, String name) {this.id= id; this.name = name;}
  public static class MyEntityBuilder {
    private int id;
    private String name;
    private MyEntityBuilder setId(int id) {this.id = id;}
    private MyEntityBuilder setName(String name) {this.name = name;}
    private MyEntity build() {return new MyEntity(id,name);} 
  }
  private int getId() {return id;}
  private String getName() {return name;}
}

Могу ли я использовать аннотации гибернации, чтобы сопоставить его с таблицей?

Ответы [ 2 ]

5 голосов
/ 17 января 2011

Да и нет.Вы можете использовать его, если вы также предоставляете установщики.

Hibernate использует Java Beans для доступа к свойствам, поэтому он использует присутствующие методы getXXX() и setXXX().Весь смысл паттерна строителя (по крайней мере, согласно Джошуа Блоху) заключается в создании неизменных объектов без установщиков.Это не будет работать с Hibernate (или любым ORM), так как они используют сеттеры для ввода значений.

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

Кстати: беглые сеттеры не являются действительными сеттерами Java Beans.Механизм Introspector не понимает их.Сеттеры должны иметь тип возврата void.

4 голосов
/ 17 января 2011

Строитель - это внешний механизм создания объектов. Достаточно, чтобы вы предоставили конструктор по умолчанию для вашей сущности, и hibernate не будет заботиться о том, как вы его получили. Так что да - это возможно, как обычная сущность.

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