如何在hibernate';s条件查询?

如何在hibernate';s条件查询?,hibernate,criteria,Hibernate,Criteria,在一个简单的“投赞成票/投反对票”场景中,我想对“投反对票”总数进行合计 criteria.add(Restrictions.eq("vote" , Boolean.TRUE)); criteria.setProjection(Projections.rowCount()); 生成的SQL将sum(this_u.vote)作为y1并生成正确的sum值,但hibernate将其解析为“boolean”值,所有结果都变为“true” 如何解决?(如果我不需要将“投票”从布尔值更改为整数) 环境:h

在一个简单的“投赞成票/投反对票”场景中,我想对“投反对票”总数进行合计

criteria.add(Restrictions.eq("vote" , Boolean.TRUE));
criteria.setProjection(Projections.rowCount());
生成的SQL将sum(this_u.vote)作为y1并生成正确的sum值,但hibernate将其解析为“boolean”值,所有结果都变为“true”

如何解决?(如果我不需要将“投票”从布尔值更改为整数)

环境:hibernate-3.6.0,jpa2


非常感谢

您使用的是什么数据库?我认为您可能需要更改hibernate使用的方言

让hibernate对布尔变量使用Tinyint

不是在我的自动提款机上-对不起。如果这可能是正确的方向,请回过头来找我,我稍后会举个例子

这可能有助于您同时开始:

干杯

编辑:

嗯。由于您使用的是Mysql,您可能需要扩展现有的Mysql方言,例如标准MySQL5方言:

 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> 
your.package.structure.dao.mysql5diallenbooleanastinyint

您使用的数据库是什么?我认为您可能需要更改hibernate使用的方言

让hibernate对布尔变量使用Tinyint

不是在我的自动提款机上-对不起。如果这可能是正确的方向,请回过头来找我,我稍后会举个例子

这可能有助于您同时开始:

干杯

编辑:

嗯。由于您使用的是Mysql,您可能需要扩展现有的Mysql方言,例如标准MySQL5方言:

 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> 
your.package.structure.dao.mysql5diallenbooleanastinyint

您好,我发现了另一个异常。该解决方案不适用于projectionlist.add(Projections.sum(“投票”),“sum”);Hibernate仍然将返回的int视为boolean.Types.BIT更改该值或添加Types.boolean这可能有帮助吗?糟糕,它仍然没有帮助。总之:registerColumnType(Types.BIT,“tinyint(1)”)和registerColumnType(Types.boolean,“tinyint(1)”,两者都适用于条件。添加(Restrictions.eq(“vote”,boolean.TRUE));criteria.setProjection(Projections.rowCount()),但不适用于projectionlist.add(Projections.sum(“投票”),“sum”);最后,我决定使用HQL来解决这个问题:嗨,我发现了另一个异常。该解决方案不适用于projectionlist.add(Projections.sum(“投票”),“sum”);Hibernate仍然将返回的int视为boolean.Types.BIT更改该值或添加Types.boolean这可能有帮助吗?糟糕,它仍然没有帮助。总之:registerColumnType(Types.BIT,“tinyint(1)”)和registerColumnType(Types.boolean,“tinyint(1)”,两者都适用于条件。添加(Restrictions.eq(“vote”,boolean.TRUE));criteria.setProjection(Projections.rowCount()),但不适用于projectionlist.add(Projections.sum(“投票”),“sum”);最后,我决定使用HQL解决这个问题: