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