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