【问题标题】:How do I fetch correct boolean field values with an ORMLite raw query?如何使用 ORMLite 原始查询获取正确的布尔字段值?
【发布时间】:2016-07-13 21:27:36
【问题描述】:

我在 Java 中使用带有 H2 数据库的 ORMLite,并且我有一个带有布尔字段的类。当我使用原始查询和 DAO 的默认原始行映射器从数据库中获取此类的对象时,返回对象中的布尔字段的值始终为 false。 (这些值在数据库中存储为TINYINT 类型。)

这是一个例子:

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);
    }
}

输出是

curious = false should be true

我知道我可以继承 RawRowMapperImpl 来覆盖此行为,但是否有内置方法来配置对象映射(例如 @DatabaseField 注释设置),以便 TINYINT1 值是解析为true?

【问题讨论】:

    标签: java ormlite


    【解决方案1】:

    感谢 Kamila,我遇到了同样的问题并解决了,但在这种情况下他的回答不正确。 你必须写:

    @DatabaseField(dataType=DataType.BOOLEAN_INTEGER)
    

    【讨论】:

      【解决方案2】:

      这是一些老问题,但可能会对某些人有所帮助。 在符号参数中使用数据类型

        @DatabaseField(dataType = DataType.BOOLEAN)
      

      【讨论】:

      • 在 ormlite 4.48 和 5.0 中,我仍然得到相同的结果。据我所知,问题在于字段转换器使用BooleanObjectType.parseDefaultString,它使用Boolean.parseBoolean,它将“1”解析为false。
      猜你喜欢
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 2011-04-08
      • 1970-01-01
      • 2013-09-22
      相关资源
      最近更新 更多