首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举上的Hibernate Projections.sum()

枚举上的Hibernate Projections.sum()
EN

Stack Overflow用户
提问于 2010-07-07 21:51:39
回答 1查看 1.5K关注 0票数 2

我需要一些Hibernate投影的帮助。

我有一个名为Activity的类,它有一个属性"duration“,它是一个Enum。持续时间是Oracle数据库上的整型字段。我已经为枚举添加了注释。

代码语言:javascript
复制
@TypeDefs({
    @TypeDef(
        name = "Duration", 
        typeClass = GenericEnumUserType.class, 
        parameters = {
            @Parameter(name = "enumClass", value = "myproject.Duration"),
            @Parameter(name = "identifierMethod", value = "getValue"),
            @Parameter(name = "valueOfMethod", value = "getInstanceByValue") }) 
})
@Entity
@Table(name = "activity")
public class Activity {
...
private Duration duration;
...
}

枚举持续时间具有方法getValue()和getInstanceByValue()。该值为Integer。

我需要总结一些符合我的标准的活动。我的DetachedCriteria看起来像这样:

代码语言:javascript
复制
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Activity.class);
...
detachedCriteria.setProjection(Projections.sum("duration"));

当我执行这个detachedCriteria时,我得到了下面的ClassCastException:

myproject.Duration cannot be cast to java.lang.Integer

如何对枚举字段求和?它在纯SQL的数据库上工作,因此我想它也应该能在hibernate上工作。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-01 01:12:02

我会将该列映射到一个int类型的附加字段。此字段需要映射为只读,以避免歧义:

代码语言:javascript
复制
@Entity
@Table(name = "activity")
public class Activity {
  ...
  private Duration duration;

  @Column(name = "duration", updatable = false, insertable = false) //mapped to the same columnn!
  private int durationNumeric
   ...
}

然后,您可以按照以下代码重写聚合查询:

代码语言:javascript
复制
detachedCriteria.setProjection(Projections.sum("durationNumeric"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3195398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档