簡體   English   中英

Hibernate和Lambdaj與分組有關的問題

[英]Hibernate and Lambdaj issue with grouping

我想使用Lambdaj從查詢結果集中執行樹分組。 結果來自休眠。

我可以成功進行聚合,但是隨后代碼在分組時失敗:

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

例外是

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執行代理。 常春藤文件提供了一個cglib-nodep.jar包。 我們的架構項目具有cglib標准發行版和asm-all (由於與Hibernate依賴)。 請注意,由於公司政策的原因,我們的Ivy依賴文件不允許傳遞依賴,並且依賴關系是由開發團隊根據項目的實際需求決定的(因此,如果Hibernate需要特定版本的cglib ,我們將其放在依賴項中)放入常春藤並將所有內容標記為非傳遞性)。

因此,在我的項目中,我有<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語法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM