powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Странности с фильтрами в Hibernate
2 сообщений из 2, страница 1 из 1
Странности с фильтрами в Hibernate
    #37890085
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Всем привет!
Никто не сталкивался с такими странностями в Hibernate.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    @Test
    public void test1() {
        Session session = getDAO().getSessionFactory().openSession();
        session.enableFilter("filter.ByOwnerId").setParameter("ownerId", 1L);
        Query query = session.createQuery("from MyEntity");
        ScrollableResults scroll = query.scroll();
        logger.info("scroll = " + scroll);
    }

Вот так не работает Падает с NullPointerException.
stacktracejava.lang.NullPointerException
at org.hibernate.hql.ast.util.JoinProcessor.processDynamicFilterParameters(JoinProcessor.java:204)
at org.hibernate.hql.ast.util.SyntheticAndFactory.addWhereFragment(SyntheticAndFactory.java:96)
at org.hibernate.hql.ast.util.JoinProcessor.addJoinNodes(JoinProcessor.java:162)
at org.hibernate.hql.ast.util.JoinProcessor.processJoins(JoinProcessor.java:124)
at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:605)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:672)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:231)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:162)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:113)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1624)
at com.wiley.tes.e5.progress.reporting.GradingTest.test1(GradingTest.java:378)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:160)
at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)
at org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)
at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)
at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)
at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:160)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:97)
at org.junit.runner.JUnitCore.run(JUnitCore.java:130)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
Фильтр задан аннотациями
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@FilterDefs({
    ....................................
    @FilterDef(name = "filter.ByOwnerId", parameters = {@ParamDef(name = "ownerId", type = "long")})
})

........................


@Filters({
    ......................
    @Filter(name = "filter.ByOwnerId", condition = "ownerId = :ownerId")
})
public class MyEntity

Однако если изменить название фильтра, скажем, на filter_ByOwnerId, то все отрабатывает как надо. WTF???

Используется Hibernate 3.6.7, Пробовал также на 4.1.4.Final - то же самое.
...
Рейтинг: 0 / 0
Странности с фильтрами в Hibernate
    #37890140
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Всем спасибо, сам разобрался.
Полез я все-таки в исходники Hibernate и обнаружил, что символ "." используется для внутренних нужд. При парсинге строки с условиями фильтрации в качестве delimiters рассматриваются следующие символы: " \n\r\f\t,()=<>&|+-=/*'^![]#~\\\"\"", а потому их в названиях фильтра или параметров нельзя. В доке, честно говоря, не нашел об этом упоминания. Ну ладно, знак подчеркивания-то хоть оставили доступным Просто хотелось идентификаторы покрасивее...
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Странности с фильтрами в Hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]