我需要一些Hibernate投影的帮助。
我有一个名为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()。该值为Integer。
我需要总结一些符合我的标准的活动。我的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上工作。
谢谢你的帮助。
发布于 2010-12-01 01:12:02
我会将该列映射到一个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"));https://stackoverflow.com/questions/3195398
复制相似问题