Как справиться с целью недостижимым элегантным способом - PullRequest
1 голос
/ 12 мая 2011

У меня есть 2 вопроса относительно такого распространенного исключения недостижимости цели. Как лучше всего справиться с этим, например, у вас есть: В стране есть город, в городе есть улица. - Вы кладете в конструктор страны новый город (), и в конструктор города новую улицу () (чтобы вы как-то располагали их в централизованном месте, но всегда создавали объекты, которые вам могут не понадобиться) ИЛИ вы инициализируете объекты в разных местах кода, где они вам нужны? (распространяется по всему вашему коду) - и если пользователь ничего не печатает, скажем, для улицы, чтобы предотвратить вставку пустой строки в БД Вы вернули улицу к нулю. Где лучшее место, чтобы вернуть его в ноль? (скажем, у вас есть Cascade.ALL или расширенный контекст, иначе вы бы просто не сохранили его, если бы знали, что он пуст)

PS: почему JSF не просто создает экземпляр того, что ему нужно, а Hibernate не сохраняет сущности, у которых все постоянные поля пусты? Для производительности или почему? Опять же, плохо ли иметь пустые строки в БД, только с PK и FKs?

1 Ответ

2 голосов
/ 13 мая 2011

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

Одна альтернатива - лениво создавать объекты в геттере:

public class Country {

    private City city;

    public City getCity() {
        if (this.city == null) {
            this.city = new City();
        }

        return this.city;
    }

}

Что касается вопросов PS, JSF не создает для вас объекты - я не уверен, чтобыть желательным ... но если вы используете ленивый подход, вы получаете то же самое.Hibernate сохраняет сущность, если ее экземпляр был создан, поскольку она сохраняет текущее состояние персистентной объектной модели, и если она не сохранила эту сущность, она не будет работать должным образом.

Обычно я не волнуюсьо нескольких пустых строках, которые я выбрал, чтобы использовать Hibernate, зная, что производительность ORM идет с небольшими затратами.Мне все еще стоит того, чтобы наслаждаться абстракцией настойчивости.

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