gpt4 book ai didi

java - Hibernate 和 Lambdaj 的分组问题

转载 作者:行者123 更新时间:2023-11-30 08:14:56 25 4
gpt4 key购买 nike

我想使用 Lambdaj 对查询结果集执行树形分组。结果来自 Hibernate。

我可以成功进行聚合,但代码在分组时失败:

List<MyClass> list = myDao.findByProperty(value);

Integer intAvg = avg(list, on(MyClass.class).getIntProperty()); //OK

Group<MyClass> group = group(list, on(MyClass.class).getGroupingStringProperty()); //FAIL

异常(exception)是

ch.lambdaj.util.IntrospectionException: java.lang.NoSuchMethodException: org.example.entityMyClass.-2147483644()
at ch.lambdaj.util.IntrospectionUtil.getPlainPropertyValue(IntrospectionUtil.java:61)
at ch.lambdaj.util.IntrospectionUtil.getBooleanPropertyValue(IntrospectionUtil.java:53)
at ch.lambdaj.util.IntrospectionUtil.getPropertyValue(IntrospectionUtil.java:45)
at ch.lambdaj.group.StringGroupCondition.getGroupValue(StringGroupCondition.java:41)
at ch.lambdaj.group.GroupImpl.addItem(GroupImpl.java:28)
at ch.lambdaj.group.Groups.group(Groups.java:58)
at ch.lambdaj.group.Groups.group(Groups.java:46)
at ch.lambdaj.Lambda.group(Lambda.java:1237)
at org.example.package.Class.method(Class.java:128)
...............
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:190)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodException: org.example.entityMyClass.-2147483644()
at java.lang.Class.getMethod(Class.java:1665)
at ch.lambdaj.util.IntrospectionUtil.getPlainPropertyValue(IntrospectionUtil.java:59)
... 91 more

我尝试做一些作业,但暂时没有成功。

Lambdaj 使用 cglib执行代理。 Ivy 文件提供了 cglib-nodep.jar包裹。我们的架构项目功能(因为依赖 Hibernate)cglib标准发布和 asm-all 。请注意,由于公司政策,我们的 Ivy 依赖文件不允许传递依赖,依赖关系由开发团队根据项目的实际需求决定(因此,如果 Hibernate 需要某个版本的 cglib ,我们将对 Ivy 的依赖并将所有内容标记为非传递性)。

所以在我的项目中我有<dependency org="com.googlecode.lambdaj" name="lambdaj" rev="2.3.3"/> (默认情况下传递 true)并且我的项目所依赖的架构项目具有

    <dependency org="org.ow2.asm"                      name="asm-all"                         rev="4.0"            transitive="false"/>
<dependency org="org.hibernate" name="hibernate-core" rev="4.1.6.Final" transitive="false"/>
<dependency org="org.hibernate" name="hibernate-ehcache" rev="4.1.6.Final" transitive="false"/>
<dependency org="org.hibernate" name="hibernate-validator" rev="4.3.0.Final" transitive="false"/>
<dependency org="org.hibernate.javax.persistence" name="hibernate-jpa-2.0-api" rev="1.0.1.Final" transitive="false"/>

(以及更多)

问题是:我在代码中做错了什么吗?这是 Hibernate 的问题吗?

最佳答案

小错误

API 必须调用,而不是

Group<MyClass> group = group(list, on(MyClass.class).getGroupingStringProperty());

而是

Group<MyClass> group = group(list, by(on(MyClass.class).getGroupingStringProperty()));

注意group...by语法

关于java - Hibernate 和 Lambdaj 的分组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29798807/

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