Загрузка нулевых значений в примитивные типы - PullRequest
2 голосов
/ 13 февраля 2012

Я пытаюсь загрузить строку базы данных в объект DO, используя методы запросов ormlite.Проблема, с которой я сталкиваюсь, связана с нулевыми значениями в базе данных, которые отображаются в поле типа Wrapper в объекте DO.Нулевые поля заполняются в DO как 0, что портит мою бизнес-логику.

Есть ли способ заставить ormlite заполнить эти поля как нуль вместо 0.

Мой пример DOструктура:

@DatabaseTable(tableName="PERSON")
public class Person
{
   @DatabaseField(columnName="NAME", dataType=DataType.STRING, useGetSet=true)
   private String name;

   @DatabaseField(columnName = "AGE", dataType = DataType.SHORT, useGetSet = true)
   private Short age;

   public String getName() 
   {
      return name;
   }

   public void setName(String name) 
   {
      this.name = name;
   }

   public Short getAge() 
   {
     return age;
   }

   public void setAge(Short age) 
   {
     this.age = age;
   }
}

Код DAO, который я использую для загрузки объектов:

person = queryForEq("NAME", someName).get(0);

Подводя итог, можно сказать, что в классе Person возраст человека хранится как нольв базе данных SQLite ormlite заполняется как 0 при запросе объекта.Я хочу избежать этого и убедиться, что возраст установлен на ноль.Есть ли способ добиться этого?

1 Ответ

0 голосов
/ 13 февраля 2012

Правильнее всего здесь не указывать dataType как часть вашей @DatabaseField аннотации. ORMLite будет правильно использовать тип поля DataType.SHORT_OBJ. Так как вы переопределяете тип поля по умолчанию и говорите, что поле Short на самом деле является примитивом, если ORMLite действительно присвоит ему значение NULL, это вызовет NPE, поэтому он назначит 0 вместо этого. Вместо этого ваш объект данных должен быть:

@DatabaseField(columnName="NAME", useGetSet=true)
private String name;

@DatabaseField(columnName = "AGE", useGetSet = true)
private Short age;

На самом деле вам никогда не нужно указывать dataType, если вы не переопределяете что-либо или если ORMLite не может сделать правильное автоматическое определение типа (например: byte[]).

...