六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 225|回复: 0

发现一个hibernate针对derby数据库的问题bug,及解决办法

[复制链接]

升级  40%

4

主题

4

主题

4

主题

童生

Rank: 1

积分
20
 楼主| 发表于 2013-1-14 23:00:59 | 显示全部楼层 |阅读模式
//最近apache软件基金会,发布了derby10.7,由于derby到10.7版本才支持boolean数据类型,今天发现一个hibernate针对derby数据库的一个bug,特意把它贴出来,以提醒他人。
        


//2011-01-01发现的hibernate针对derby数据库的问题。


//有问题的JPQL查询语句        
//String sql = "SELECT letter FROM LetterReceiveModel As letter WHERE letter.receivePersonId=?1 AND letter.read=false AND letter.favoriteBoxFlag=false AND letter.trashBoxFlag=false";


        //发现hibernate在翻译JPQL查询时,翻译规则是,false—>0,true—>1,所以对于bit类型的字段是合适的。
        //但是对于derby数据库的boolean型字段类型就会出错,解决办法是明确传递boolean型参数,这样就可以避开这个bug。
//没问题的JPQL写法
        String sql = "SELECT letter FROM LetterReceiveModel As letter WHERE letter.receivePersonId=?1 AND letter.read=?2 AND letter.favoriteBoxFlag=?3 AND letter.trashBoxFlag=?4";
        //
        Query query = this.getEntityManager().createQuery(sql);
        query.setParameter(1, receivePersonId);
        query.setParameter(2, false);
        query.setParameter(3, false);
        query.setParameter(4, false);


//执行查询
        List<LetterReceiveModel> objList = query.getResultList();
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表