Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / вопрос по hibernate criteria(выборка+сортировка с нескольких таблиц) / 3 сообщений из 3, страница 1 из 1
09.07.2012, 19:38:59
    #37872152
userio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по hibernate criteria(выборка+сортировка с нескольких таблиц)
всем привет!
у меня есть следующие таблицы:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  Table table1
    table1Id
    field1
    field2
    field3
    
    Table table2
    table2Id
    table2_field1
    table2_field2
    table2_field3
    table1Id


в этом методе я получаю объекты, сортированные по некоторому полю

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public List<table1> getMost() {
    		
    		DetachedCriteria criteria = (DetachedCriteria) DetachedCriteria.forClass(table1.class);
    		//criteria.add(Restrictions.conjunction());
    		criteria.addOrder(Order.desc("field1"));
    		
    		List<table1> myList = (List<table1>) findByCriteria(criteria,
                    false, 0, 10);//get first 10 elements by some criteria
    		return myList;
    	}



далее мне нужно получить объекты из таблицы2, отсортированные по некоторому, но при этом другое поле должно подпадать быть равным одному из id в получаемом List. Но фишка заключается в следующем: мне нужно получить для 1 table1id только 1 объект из таблицы2.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    public Item getTheBest(Long table1Id) {
    
            DetachedCriteria criteria = (DetachedCriteria) DetachedCriteria
                    .forClass(Item.class);
    
            DetachedCriteria maxQuery = DetachedCriteria.forClass(Item.class);
            maxQuery.add(Restrictions.eq("table1Id", table1Id)).setProjection(
                    Projections.max("table2_field1"));
            criteria.add(Restrictions.and(
                    Restrictions.eq("table1Id", table1Id),
                    Property.forName("table2_field1").eq(maxQuery)));
            List<Item> result = (List<Item>) findByCriteria(criteria, false);
    
            if (result.iterator().hasNext())
                return result.iterator().next();
            else
                return null;
    
        }
	




поэтому мне нужен метод типа:

Код: sql
1.
    public Item getTheBest(List<Long> table1Ids)



таким образом данный метод с помощью хибера должнен делать меньше вычисление на серваке(больше в самой БД).
как мне сделать такую штуку на hibernate?

ну или хотя бы помогите написать SQL-запрос(у меня в голове целиком уже не укладывается), дальше сам попытаюсь.
...
Рейтинг: 0 / 0
09.07.2012, 20:40:01
    #37872198
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по hibernate criteria(выборка+сортировка с нескольких таблиц)
Если нет количественной выборки (LIMITS), а только качественная (WHERE), то может проще воспользоваться HQL:
Код: java
1.
List<Table2> list = session.createQuery("FROM Table2 table2 WHERE table2.table2_field1 = (SELECT MAX(table1.field1) FROM Table1 table1 WHERE ...)").list();


Я, правда, не очень понял постановку вопроса, ориентировался исключительно по коду.
...
Рейтинг: 0 / 0
10.07.2012, 17:07:36
    #37873620
userio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по hibernate criteria(выборка+сортировка с нескольких таблиц)
ок. сейчас попытаюсь более детально, без сумбура описать.
1. я выбрал некоторые данные из таблицы1, отсортированные по некоторому полю.
2. основываясь на id этих объектов(предположим, их 10 штук), я выбираю из таблицы2 такие данные, у которых:
- поле table1id совпадает из набора полученных 10 объектов
- эти данные отсортированы по некторому другому полю(выбирается 1е стоящее вверху значение)
- может быть не больше 1 экземпляра с table1id
т.е. если есть 10 объектов из таблицы 1, то берём 1й элемент, для него из таблицы2 находим одно значение, максимальное по некоторму полю, потом берём 2й, 3й, ....10й и для них проделываем точно такое.(сейчас я описал по сути то, как оно работает у меня сейчас, но хочется, чтобы всё это выполнялось за 1 запрос, а не n запросов
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / вопрос по hibernate criteria(выборка+сортировка с нескольких таблиц) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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