gpt4 book ai didi

java - 枚举上的 Hibernate Projections.sum()

转载 作者:行者123 更新时间:2023-11-29 09:25:01 26 4
gpt4 key购买 nike

我需要一些有关 Hibernate Projections 的帮助。

我有一个名为 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;
...
}

枚举 Duration 有方法 getValue() 和 getInstanceByValue()。值为整数。

我需要总结一些符合我标准的 Activity 的职责。我的 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"));

关于java - 枚举上的 Hibernate Projections.sum(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3195398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com