Статьи

Спящий Gotchas!

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

так вот своего рода контрольный список для моего я надеюсь , будет полезно для кого-то еще.

Реализуйте hashCode и равно

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

Вы должны иметь в виду, что вы работаете с сущностями БД, а не с обычными POJO.

Когда Hibernate выбирает объекты, вы используете коллекции и, следовательно, равны и hashCode, чтобы узнать, находится ли искомый объект в сеансе. Для новых объектов id будет нулевым или 0.

Это означает, что при попытке сохранить два объекта одного класса второй будет перезаписывать первый.

Также, когда hibernate сохраняет новый экземпляр, он устанавливает id, что делает его другим объектом, в то время как он точно такой же.

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

Это хороший справочник, если вы хотите немного больше понять, что происходит.

Осторожнее в отношениях один-к-одному и многие-к-одному

Это то, что вам действительно нужно знать.

При отображении отношения как «один-к-одному» или «многие-к-одному» на стороне «один» отношения вы не сможете выполнить отложенную загрузку,
если не укажете поле как необнуляемое.

Почему это?

По существу, во многих отношениях отношения hibernate могут использовать прокси-серверы коллекций и лениво загружать экземпляры при необходимости.

На стороне «One» нет интерфейса коллекции, а есть ссылка на один из классов вашей модели.

Hibernate также может это прокси, но только если он уверен, что ссылка никогда не будет нулевой!

Так что помните, что если вы хотите, чтобы загрузка была отложенной, используйте ненулевое значение с одной стороны вместе с отложенной аннотацией (или эквивалентом xml).

Если ваше отношение может быть нулевым, но вы все еще хотите сделать его ленивым, у вас есть несколько вариантов:

  • Создайте значение для представления этого. Например, если у вас есть такие отношения, как Персона — & amp;> Партнер, просто используйте конкретный экземпляр Партнера, что означает «нет партнера».
  • Используйте инструменты времени сборки. Проверьте это
  • Подделать одну сторону, используя List и получить поле с get (0)

Подробнее о документации по
спящему режиму

Включить ведение журнала

Это единственный способ убедиться, что Hibernate действительно делает то, что вы ожидаете от него. К счастью, есть разные параметры ведения журнала, которые вы можете использовать, чтобы узнать, что происходит как на HQL, так и на уровне SQL. Вы будете удивлены, сколько раз Hibernate запускает запросы, и вы не исключали его. Попробуйте это с самого начала и помогите команде понять, насколько важно иметь наилучшие и наименьшие возможные запросы, иначе у вас наверняка возникнут проблемы с производительностью при запуске приложения с некоторыми реальными данными. Чтобы включить ведение журнала, просто установите это свойство в файле конфигурации сеанса.

hibernate.show_sql=true

Если вы хотите увидеть его красиво отформатированный добавить

hibernate.format_sql=true

Посмотрите, что происходит в методе toString.

Это снова связано с тем, что Hibernate приносит вам без вашего ведома. Много раз, когда вы видите запросы, но не можете понять, почему загружается какой-то ленивый список, тогда проверяйте метод toString.

Это может быть виновником!

Каковы ваши спящие Гоч?

От http://www.devinprogress.info/2011/08/hibernate-gotchas.html