Рекомендация по использованию равных в сущностях и избегать LazyInitializationExceptions? - PullRequest
0 голосов
/ 25 мая 2010

В начале есть проблема, которую нужно решить. В моем случае я получил LazyInitializationException при использовании indexof в коллекции для получения объекта для манипуляций. Здесь я начинаю думать об использовании equals в EntityBeans (OR-Mapper вообще). Я знаю, что есть некоторые дискуссии о переопределении equals в ассоциации с OR-Mapper как hibernate, как

[1] Объекты equals (), hashCode () и toString (). Как правильно их реализовать?

[2] Равен и хэш-код или нет в классах сущностей, вот в чем вопрос.

[3] Переопределение equals и hashCode в Java

В настоящее время у меня есть некоторые сущности, которые реализуют равенства, но внутри кода, который я не смог использовать, несколько раз из-за исключений LazyInitializationException. Так что я должен был обойти и использовать, например. свойство name объекта, чтобы определить его равенство. С моей точки зрения, «LazyInitializationException-thing» вообще не упоминается в этих вопросах.

Я хотел бы знать, есть ли у вас хорошие шаблоны или реальные рекомендации, как избежать такого исключения в равном методе. Должен ли я использовать некоторые вспомогательные методы, чтобы различать, если объект класса уже инициализирован ( 4 ), или я должен назначить использование равных и использовать вместо этого вспомогательные классы ( 2 )? А что насчет перехвата исключений LazyInitialization в равных?


[Edit]: Если вы поместите в контекст равные с инициализацией Объекта, тогда это приобретет важность. Иногда необходимо полностью инициализировать объект, но иногда вы этого не хотите. Потому что вам просто нужен сам объект (name, id, ...), а не его Collection-Properties. Так что просто для выравнивания вы должны заново прикрепить Объект и загрузить всю связку, которая вам на самом деле не нужна? Есть ли другие решения для такой проблемы?

1 Ответ

0 голосов
/ 25 мая 2010

LazyInitializationException и equals (), hashCode () и другие имеют мало общего друг с другом. Вы можете создать исключение LazyInitializationException, когда лениво загруженный объект пытался получить доступ к связанному объекту, который еще не был загружен, и объект был отключен или исключен из сеанса.

Для этого есть два исправления:

  1. нетерпеливо загружает сущность и связанные с ней сущности перед закрытием сеанса.
  2. Используйте шаблон "открыть сеанс в представлении", чтобы сеанс оставался открытым в течение всего запроса.

Оба эти подхода обсуждаются в ссылке ниже.

...