2016-07-13 18 views
1

私はJavaのH2データベースでORMLiteを使用していますが、ブール値フィールドを持つクラスがあります。未加工のクエリとDAOのデフォルトの未加工行マッパを使用して、このクラスのオブジェクトをデータベースからフェッチすると、返されるオブジェクトのブール値フィールドの値は常にfalseになります。 (値がデータベースにタイプTINYINTとして格納されている)ORMLite生クエリで正しいブール値フィールド値を取得するにはどうすればよいですか?

ここでは例です:

public class BooleanPersistenceWithRawQueries { 

    @DatabaseTable 
    public static class George { 
     @DatabaseField(generatedId = true) public Integer id; 
     @DatabaseField public boolean curious; 
    } 

    public static void main(String[] args) throws Exception { 
     ConnectionSource connectionSource = new JdbcConnectionSource("jdbc:h2:mem:"); 
     Dao<George, ?> dao = DaoManager.createDao(connectionSource, George.class); 
     TableUtils.createTable(connectionSource, George.class); 
     George g = new George(); 
     g.curious = true; 
     dao.create(g); 
     George h = dao.queryRaw("SELECT * FROM George", dao.getRawRowMapper()).getFirstResult(); 
     System.out.println("curious = " + h.curious + " should be " + g.curious); 
    } 
} 

出力は、私はこの動作をオーバーライドするRawRowMapperImplをサブクラス化する可能性が知っている

curious = false should be true 

ですが、 TINYINTの値が1になるように、オブジェクトマッピング(@DatabaseField注釈設定など)を設定する組み込みの方法がありますか?true

答えて

0

これはいくつかの古い問題ですが、それはあるものに役立つかもしれません。表記のparamで データ型を使用し

@DatabaseField(dataType = DataType.BOOLEAN) 
+0

私はまだormlite 4.48と5.0で、同じ結果を取得しています。問題は、私が知る限り、フィールドコンバーターは 'BooleanObjectType.parseDefaultString'を使用します。これは' Boolean.parseBoolean'を使用し、 '1 'を偽として解析します。 – user4851

関連する問題