1

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

例外は

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の問題ですか?

4

1 に答える 1

1

些細なミス

API は次のようにではなく呼び出す必要があります。

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

むしろ

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

注意group...by構文

于 2015-04-22T13:22:35.667 に答える