powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как делать select через EntityManager?
7 сообщений из 7, страница 1 из 1
Как делать select через EntityManager?
    #37750833
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например у меня есть какой-то select:
Код: sql
1.
2.
3.
4.
5.
6.
7.
            String some_query="select * from some_table where some_col=-1";
            Query qq=em.createNativeQuery(some_query);
            qq.executeUpdate();
        
            String some_query2="select p from some_table p where some_col=-1";
            Query qq2=em.createNativeQuery(some_query2);
            qq2.executeUpdate();


А как мне его переписать через EntityManager?
Не нравится мне делать запросы в явном виде.
Это делается примерно так:
Код: sql
1.
2.
3.
4.
        CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(WorkTimeTable.class)).where(?????????);
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        List ki=q.getResultList();


Но у меня вызывает большой вопрос .where(?????????).
Там должен быть javax.persistence.criteria.Expression.
Но это интерфейс и все производные классы это тоже интерфейсы: http://docs.oracle.com/javaee/6/api/javax/persistence/criteria/package-tree.html
Как составить where чтобы мой запрос через EntityManager был аналогичен вышеприведённому select'у в явной форме?
...
Рейтинг: 0 / 0
Как делать select через EntityManager?
    #37750836
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Косяк:
Вот так надо:
Код: sql
1.
2.
3.
            String some_query2="select p from some_table p where some_col=-1";
            Query qq2=em.createQuery(some_query2);
            qq2.executeUpdate();
...
Рейтинг: 0 / 0
Как делать select через EntityManager?
    #37750844
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как делать select через EntityManager?
    #37750882
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А спасибо! Почитаю! Попробую! Поэкспериментирую! Полезная вещь!
...
Рейтинг: 0 / 0
Как делать select через EntityManager?
    #37750900
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ещё вот такой вариант
http://www.querydsl.com/
...
Рейтинг: 0 / 0
Как делать select через EntityManager?
    #37751750
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz
У меня вызывает затруднение вот такой момент:
http://www.altuure.com/2010/09/23/jpa-criteria-api-by-samples-part-i/
Есть такой код:
Код: sql
1.
2.
3.
4.
5.
6.
            CriteriaBuilder criteriaBuilder=em.getCriteriaBuilder();
            CriteriaQuery<Object> criteriaQuery=criteriaBuilder.createQuery();
            Root<WorkTimeTable> from=criteriaQuery.from(WorkTimeTable.class);
            CriteriaQuery<Object> select=criteriaQuery.select(from);
            TypedQuery<Object> typedQuery=em.createQuery(select);
            List<Object> resultList=typedQuery.getResultList();


Получаю все результаты.
Root<WorkTimeTable> from=criteriaQuery.from(WorkTimeTable.class);
Если мы пишем Path pp=from.get("");
Тип у from.get("строка") тип на выходе Path, а на вход criteriaBuilder.ge() нужен Expression. А в том примере чел каким-то образом туда Path впихивает, а они несовместимы.
Как создать критерий?

Пример:
criteriaBuilder.equal(Expression<?> x, Object y);
Я так понимаю, что в качестве Expression<?> x должно быть что-то типа from.get();
А как должен правильно выглядеть этот from.get()???
...
Рейтинг: 0 / 0
Как делать select через EntityManager?
    #37751791
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ХА!
Мне кажется взломал это!
Что-то типа этого!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            CriteriaBuilder criteriaBuilder=em.getCriteriaBuilder();
            CriteriaQuery<Object> criteriaQuery=criteriaBuilder.createQuery();
            Root<WorkTimeTable> from=criteriaQuery.from(WorkTimeTable.class);
            CriteriaQuery<Object> select=criteriaQuery.select(from);

            Expression myexp=from.get("userName").as(WorkTimeTable.class);
            Predicate mypredicate=criteriaBuilder.equal(myexp, "user2");
            criteriaQuery.where(mypredicate);
            
            TypedQuery<Object> typedQuery=em.createQuery(select);
            List<Object> resultList=typedQuery.getResultList();


В результате получил 1 запись из таблицы!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как делать select через EntityManager?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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