在枚举上的Hibernate Projections.sum()

时间:2010-07-07 13:51:39

标签: java hibernate

我需要一些Hibernate Projections的帮助。

我有一个名为Activity的类,其属性为“duration”,即Enum。持续时间是Oracle数据库上的整数字段。我注释了枚举。


@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()。值是一个整数。

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


DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Activity.class);
...
detachedCriteria.setProjection(Projections.sum("duration"));

当我执行这个detachedCriteria时,我得到以下ClassCastException:

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

如何总结枚举字段?它使用纯SQL在数据库上工作,因此它应该与hibernate一起使用somhow我假设。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

@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
   ...
}

然后按以下几行重写聚合查询:

detachedCriteria.setProjection(Projections.sum("durationNumeric"));