我需要一些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我假设。
感谢您的帮助。
答案 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"));