【问题标题】:What is Hibernate equivalent of Projections.Cast?Projections.Cast 的 Hibernate 等价物是什么?
【发布时间】:2011-11-06 14:40:27
【问题描述】:

我已经使用 HQL 解决了我的问题,并且效果很好。

但我确实喜欢 Criteria API。 (我的查询构建器字符串中有一些 ifs 语句用于 HQL,呸) 显然 Projections.sum(property) 返回双倍。

我的实体类有

@Column(name = "current_volume")   
private Integer currentVolume;

我得到的错误是

org.hibernate.PropertyAccessException: IllegalArgumentException 在调用 se.unox.pejl.entity.value.pejl.PejlDataTrendValue.currentVolume 的设置器时发生。

我的等效工作 hql 是

select cast(sum(p.currentVolume/1000) as integer) as currentVolume from      
se.unox.pejl.entity.value.pejl.PejlDataTrendValue as p

我想我知道问题出在哪里,但无法弄清楚如何将列的总和(在 mysql 中为 INT(11))转换为整数。显然 NHibernate 有 Projections.Cast

我使用的是 Hibernate 3.6

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    基于this blog post(除非在 3.5 和 3.6 之间发生了更改),Projections.sum 的返回类型取决于被求和的属性的属性类型:

    对于映射为 Long、Short、Integer 或原始整数类型的属性,返回 Long 值;

    对于映射为 Float、Double 或原始浮点类型的属性,将返回 Double 值。

    如果您想覆盖本机功能,follow the answer in this post

    【讨论】:

    • 谢谢阿伦!所以它变成了 Long 而不是我假设的 double 。难怪我得到异常。 Entity 类已有多年历史,我真的不想改变它。我正在寻找的是在我添加的新代码中进行简单的 NHibernate 样式转换,而不是触及旧代码。我想我会坚持 HQL。
    • 既然如此,请尝试在我的答案底部链接到的覆盖。
    • 当我的实体 bean 具有映射属性时,我不确定是否要在数据库列名称(SQL 投影)中写入。
    猜你喜欢
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2014-05-08
    • 2014-06-12
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多