Использование Enum в Hibernate вызывает выбор, за которым следует оператор обновления - PullRequest
5 голосов
/ 07 января 2011

У меня есть сопоставленная сущность, у которой есть свойство enum.Посмотрев на файл журнала, всякий раз, когда я запускаю оператор выбора для такой сущности, результатом является сразу же следующее обновление.Например, если мой набор результатов содержит 100 записей, то у меня есть:

[INFO org... select...]
[INFO org... update... where id=?]
[INFO org... update... where id=?]

.... повторяется 100 раз

Если я отмечу свойство как update = false, проблема исчезнет.Перечисление присваивается через класс преобразователя перечисления, который я скопировал из известной книги.Так что я не знаю, просто скопировать и вставить код.Вот как это объявлено в файле hbm.

<typedef class="mypackage.HbnEnumConverter" name="the_type">
    <param name="enumClassname">mypackage.TheType</param>
</typedef>

Можете ли вы указать направление для расследования этого?Кроме того, каковы последствия наличия update = false в поле гибернации?

спасибо

1 Ответ

2 голосов
/ 07 января 2011

Hibernate сгенерирует обновление, если ваш объект помечен как грязный.

Просмотрите журналы, чтобы узнать, помечает ли hibernate ваш объект как грязный.

, если у вас есть что-то похожее на приведенное ниже.

 class Entity{

   public YourEnum getEnum() {
    return yourEnum==null?YourEnum.SOME_VALUE:....;
   }
 }

Или, возможно, в вашем методе Enum.equals вывозвращают ложь для случая, вероятно, равного (нуля, нуля)?

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

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