2015-04-22 3 views
1

Я хочу выполнить древовидную группировку из набора результатов запроса с помощью Lambdaj. Результаты взяты из Hibernate.Проблема с гибернацией и 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 для выполнения проксирования. Файл Ivy предоставляет пакет cglib-nodep.jar. Наши архитектурные проекты (из-за зависимости от Hibernate) cglib стандартный выпуск и asm-all. Обратите внимание, что из-за политики компании наш файл зависимостей Ivy не разрешает транзитивную зависимость, а зависимости определяются командой разработчиков на основе реальных потребностей проектов (поэтому, если Hibernate требует определенную версию cglib, мы ставим эту зависимость в Айви и пометить все как не-транзитивные).

Так мой проект у меня есть <dependency org="com.googlecode.lambdaj" name="lambdaj" rev="2.3.3"/> (переходный истинно по умолчанию) и мой проект архитектуры, от которого зависит мой проект, имеет

<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"/> 

(и многое другое)

Вопрос is: я делаю что-то неправильно в коде? Это проблема с Hibernate?

+0

Я задал этот вопрос, потому что я изначально думал, что это большая проблема, но потом я обнаружил, что сделал тривиальная ошибка при вызове API. Стоит ли закрываться в соответствии с правилами? –

ответ

1

Trivial ошибка

API-интерфейс должен быть вызван не как

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

а

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

Примечание group ... by синтаксис

Смежные вопросы