如何在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解决这个问题: