2013-10-04 4 views
1

Моя команда использует Hibernate Tools 4.0.0 в текущем проекте, и я использую FindBugs. Он отмечает, что метод equals кода ORM использует == вместо equals.Reverse engineering generate ==, not equals

Я искал, но не смог найти, как это изменить. По моему мнению, не следует использовать equals вместо ==? Если да, то как это сделать (через hibernate.reveng.xml или что-то еще)?

Обновление: Мне нужно было прокрутить вправо, чтобы увидеть остальную часть созданного кода. Оказывается, первая часть, которая была отмечена , является, делая ссылку на память. Тем не менее, OR'd сравнивается с использованием equals. Так что это просто случай, когда нужно внимательно читать.

ответ

1

это зависит от того, что сравнивается. == сравнивает рефренсы при работе с объектами, а .equals() сравнивает значение объектов (если .equals() поддерживается этими объектами).

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

+0

Поскольку это класс id, более конкретно первичные ключи к таблице. Я предполагаю, что он имеет дело с объектными значениями, а не с ссылками. Не имеет смысла говорить, что две вещи не равны, если их ссылки на Java различны. База данных этого не видит;) Кроме того, я согласен с тем, что это переопределяет 'Object'' equals', что опять-таки касается значений, а не ссылок. – user1766760

+0

Хотя я предполагаю, что другой способ взглянуть на это, так или иначе Hibernate * не считает объекты одинаковыми, если их ссылки не совпадают? Я не знаю, почему это меня действительно беспокоит, но я не могу найти ничего в Интернете ... это обычно означает, что мое понимание ошибочно. Это не имеет никакого смысла. – user1766760

+0

Пример: 'String a =" someString "; Строка b = a; if (a == b) {System.out.println ("То же ссылка!"); } 'prints" То же самое! " поскольку объекты a и b относятся к одному и тому же местоположению памяти (аналогично указателю). – SnakeDoc