2015-02-06 8 views
6

Наличие длинного поля в сущности, управляемой спящим режимом, может быть опасным с нулевыми значениями. Когда Hibernate пытается установить нуль в примитив, будет выбрано исключение.Избегайте «исключения в спящем режиме» Значение Null было присвоено свойству примитивного типа setter без обертков

Лучшим решением должно быть использование Long вместо long, поэтому null может быть присвоено длинному полю.

Но, я работаю над проектом, где мы не можем использовать Long или Integer. Мне интересно, есть ли способ переопределить типы гибернации, чтобы использовать метод nullSafe или что-то в этом роде.

+1

ОК, я просто должен спросить ... * Почему * вы не можете использовать 'Long' и/или' Integer'? –

ответ

-1

Я всегда использую инкапсулированные типы классов, но если вы не можете, вы можете проверить атрибуты сущностей, прежде чем упорствовать это что-то вроде:

if (entity.getAttribute == null){ 
entity.setAttribute(0); //case of long, int... 
} 
+0

да, на самом деле, но проблема связана с данными, которые уже находятся в базе данных, поэтому это не опция (обновление хранимых данных также не является параметром) – ilopezluna

+0

Это не скомпилируется, если тип возвращаемого значения 'entity.getAttribute() '' 'int' или' long'. Кроме того, проблема, с которой сталкивается OP, заключается в том, что сама библиотека hibernate * пытается вызвать setter * с «null». –