Есть ли разница в объявлении включенной переменной как Boolean или boolean? Что предпочтительнее с точки зрения объема памяти.
@Entity
class User {
@Column
Boolean enabled;
}
Есть ли разница в объявлении включенной переменной как Boolean или boolean? Что предпочтительнее с точки зрения объема памяти.
@Entity
class User {
@Column
Boolean enabled;
}
Они оба будут сопоставляться с тем же типом столбца. С точки зрения памяти, примитив, вероятно, будет немного легче, но разница почти наверняка будет незначительной. Я думаю, что примитив сделает его непустым, но вы также можете сделать это с помощью аннотации.
Я обычно предлагаю использовать примитивные типы, просто чтобы избавиться от нулевых проверок по всему месту. Но это действительно зависит от того, что вы хотите сказать. Теперь ваш Boolean может содержать 3 значения:
И null может создавать полную новую семантику при работе с объектами. Обычно я использую его как "Нет данных". Ваш "включен" может быть плохим примером для такого рода полей. Но позвольте сказать, что у вас есть число, которое содержит возраст человека.
private Integer age;
Когда вы используете null, вы можете рассматривать это как: "Неизвестно". Вы также можете использовать int и определить специальное значение (-1) для этого случая, но null является более естественным решением.
Итак, подведем итог. Использовать примитивы, если всегда есть значимое значение (обязательные поля?) И классы-оболочки для необязательных значений.
Kaleb right - если какие-либо запросы возвращают нулевое значение для "enabled" (в этом случае), вы должны использовать объект, а не примитив.
Это из Hibernate FAQ:
Свойство PropertyAccessException часто возникает, когда объект, передаваемый методу setter, имеет неправильный тип. Проверьте сопоставления типов для нарушающего свойства. (Чтобы узнать, какое именно свойство было проблемой, вам может потребоваться отключить оптимизатор отражения CGLIB.) Однако наиболее распространенной причиной этой проблемы является то, что Hibernate попытался присвоить значение null первообразному типу.
Если ваш объект имеет свойство примитивного типа, сопоставленное с нулевым столбцом базы данных, вам нужно будет использовать собственный тип Hibernate для назначения разумного значения по умолчанию (примитив) для случая значения нулевого столбца. Лучшим решением, как правило, является использование типа оболочки для свойства Java.