2012-02-13 9 views
2

ormliteクエリメソッドを使用してDOオブジェクトにデータベース行をロードしようとしています。私が直面している問題は、DOオブジェクトのWrapper型フィールドにマップされているデータベースのNULL値です。 nullフィールドは0としてDOに取り込まれ、ビジネスロジックが崩れます。null値をプリミティブ型にロードする

0ではなく

私のサンプルのヌルとしてこれらのフィールドを埋めるためにormliteせることができるどのような方法がありますが構造を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コードがあります:人の年齢はSQLiteデータベースにNULLとして格納されている場合

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

要約すると、Personクラスでは、ormliteは、オブジェクトをクエリに0として投入されます。私はこれを避け、年齢がヌルとして設定されていることを確認したいこれを達成する方法はありますか?

+0

なぜ私は反射を使用させるのではなく、 'useGetSet'を使うのが好きですか? – Gray

+0

私は 'useGetSet'を使う特別な理由はありません。それを試していた。 'useGetSet'を使用すると、アプリケーションのパフォーマンスに悪影響がありますか? –

+0

いいえ、ちょうどデフォルトではなく、私は不思議でした。リフレクションはデフォルトです。 – Gray

答えて

0

@DatabaseField注釈の一部としてdataTypeを指定しないでください。 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; 

本当にあなたが何かを上書きまたはORMLiteが良い自動タイプの決意(例:byte[])を作ることができない場合はされていない限り、dataTypeを指定する必要はありません。

+0

ありがとうございます。私はそれを期待していたので、これはうまくいった。 –

関連する問題