Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在枚举上休眠Projections.sum()_Java_Hibernate - Fatal编程技术网

Java 在枚举上休眠Projections.sum()

Java 在枚举上休眠Projections.sum(),java,hibernate,Java,Hibernate,我需要一些关于Hibernate投影的帮助 我有一个名为Activity的类,它的属性“duration”是一个枚举。Duration是Oracle数据库上的整数字段。我已经对枚举进行了注释 @TypeDefs({ @TypeDef( name = "Duration", typeClass = GenericEnumUserType.class, parameters = { @Parameter(name

我需要一些关于Hibernate投影的帮助

我有一个名为Activity的类,它的属性“duration”是一个枚举。Duration是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()。该值是一个整数

我需要总结一些符合我标准的活动。我的DetachedCriteria如下所示:


DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Activity.class);
...
detachedCriteria.setProjection(Projections.sum("duration"));
当我执行此detachedCriteria时,我得到以下ClassCastException:


myproject.Duration不能强制转换为java.lang.Integer

如何对枚举字段求和?它使用纯SQL在数据库上工作,因此我认为它也应该使用hibernate


谢谢你的帮助

我会将列映射到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"));

我会将列映射到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"));