首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate和Lambdaj问题与分组

Hibernate和Lambdaj问题与分组
EN

Stack Overflow用户
提问于 2015-04-22 13:17:09
回答 1查看 206关注 0票数 1

我希望使用Lambdaj从查询结果集执行树分组。结果来自冬眠。

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

代码语言:javascript
复制
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

例外是

代码语言:javascript
复制
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。请注意,由于公司策略,我们的常春藤依赖文件不允许传递依赖关系,依赖关系是由开发团队根据项目的实际需求确定的(因此,如果Hibernate需要特定版本的cglib,我们将该依赖项放入常春藤中,并将所有依赖标记为非传递依赖)。

因此,在我的项目中,我有<dependency org="com.googlecode.lambdaj" name="lambdaj" rev="2.3.3"/> (默认情况下是可传递的),而我的项目所依赖的架构项目有

代码语言:javascript
复制
    <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的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 13:22:35

微不足道的错误

必须调用API,而不是

代码语言:javascript
复制
Group<MyClass> group = group(list, on(MyClass.class).getGroupingStringProperty());

但更确切地说

代码语言:javascript
复制
Group<MyClass> group = group(list, by(on(MyClass.class).getGroupingStringProperty()));

注意group.by语法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29798807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档