如何在hibernate条件查询中将sum(boolean)作为整数?

时间:2010-11-29 14:07:22

标签: hibernate criteria

在一个简单的“投票/投票”情景中,我想总计“向上”计数。

criteria.add(Restrictions.eq("vote" , Boolean.TRUE));
criteria.setProjection(Projections.rowCount());

生成的SQL为sum(this_.vote) as y1_并生成正确的sum值,但hibernate将其解析为'boolean'值,全部变为'true'...

如何解决? (如果我不需要将'vote'从布尔值更改为整数)

环境:hibernate-3.6.0,jpa2

非常感谢!

1 个答案:

答案 0 :(得分:1)

你在使用什么数据库?我想你可能需要改变hibernate工作的方言。

让hibernate使用Tinyint作为布尔变量。

不在我工作的copmuter atm上 - 抱歉。如果这可能是正确的方向,请回到我身边,稍后我会得到一个例子。

这可能有助于您在此期间开始:https://forum.hibernate.org/viewtopic.php?f=1&t=1008105

欢呼声

编辑:

确定。由于您使用的是Mysql,因此您可能希望扩展现有的MySQL方言 - 例如标准MySQL5Dialect:

 public class MySQL5DialectBooleanAsTinyint extends MySQL5Dialect {

  public MySQL5DialectBooleanAsTinyint() {
    super();
    registerColumnType(Types.BIT, "tinyint(1)");
  }

}

就是这样。要使用自定义方言,请相应地更改hibernate.cfg:

 <property name="hibernate.dialect">your.package.structure.dao.MySQL5DialectBooleanAsTinyint</property>