Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Не получается написать запрос на HQL. / 23 сообщений из 23, страница 1 из 1
07.08.2007, 12:35:37
    #34710293
Oleg Marshalenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
Не получается написать запрос на HQL:

Запрос на HQL, который не работает:
Код: plaintext
1.
2.
3.
4.
5.
SELECT r.localityId, ln.name, r.regionCode 
FROM Region AS r 
      LEFT JOIN r.localityNames AS ln 
WHERE ln.localeIndex = :localeIndex AND r.country.localityId = :countryId 
ORDER BY ln.name

Вот запрос на SQL, который работает:
Код: plaintext
1.
2.
3.
4.
5.
select r.locality_id as id, ln.name as name, r.region_code as abbreviation
from region r 
    left join region_locality_names rln ON rln.region = r.locality_id " +
        left join locality_name ln on ln.locality_name_id = rln.locality_names and ln.locale_index = :localeIndex 
WHERE r.country = :countryId

Причину того, что HQL запрос не работает, я вижу в том что у него в WHERE стоит условие ln.localeIndex = :localeIndex, а в SQL я его перенес в left join locality_name ln on ... and ln.locale_index = :localeIndex
...
Рейтинг: 0 / 0
07.08.2007, 12:46:10
    #34710375
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
может лог покажешь?
...
Рейтинг: 0 / 0
07.08.2007, 14:50:10
    #34710994
ncr
ncr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
А почему бы, не раскрутить все это используя операторы явы?
...
Рейтинг: 0 / 0
07.08.2007, 15:00:05
    #34711044
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
а долго потому что будет
...
Рейтинг: 0 / 0
07.08.2007, 15:09:25
    #34711077
ncr
ncr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
почему долго то?
...
Рейтинг: 0 / 0
07.08.2007, 16:58:50
    #34711590
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
ncrА почему бы, не раскрутить все это используя операторы явы?
тогда поясни что имел ввиду
...
Рейтинг: 0 / 0
07.08.2007, 17:52:34
    #34711859
ncr
ncr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
Ну допустим имеется пару справочников (в примере Oleg Marshalenko я не совсем понял что являет собой какая таблица) и оперативная таблица.
Для справочников получаем полный набор записей (допустим в HashMap<код, сущность>) для оперативной таблицы получаем записи по какому то критерию (т.к. все они редко когда нужны), далее по коду из оперативной таблицы берем значение из хешмапа.
...
Рейтинг: 0 / 0
07.08.2007, 18:25:53
    #34712029
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
я вас поздравляю, но это откровенное извращение, которое даже не обсуждается

что-то по моему у хорстмана было ... мол не пишите SQL сервер на HashMap-ах
...
Рейтинг: 0 / 0
07.08.2007, 18:41:22
    #34712079
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
В общем случае это правда - реализовавать nested loops на хэш мапах - жжесть.
Но, как обычно, в отдельных случаях у такого подхода могут быть плюсы.
К примеру, lookup по read-only таблице в ахриненных количествах.
...
Рейтинг: 0 / 0
07.08.2007, 18:53:00
    #34712116
ncr
ncr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
А можно в таком случае услышать правильный подход для решения такого рода задач?
...
Рейтинг: 0 / 0
07.08.2007, 19:06:08
    #34712165
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
ncrА можно в таком случае услышать правильный подход для решения такого рода задач?
SQL :)
...
Рейтинг: 0 / 0
07.08.2007, 19:11:57
    #34712181
ncr
ncr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
В смысле HQL???
...
Рейтинг: 0 / 0
07.08.2007, 20:49:50
    #34712330
Oleg Marshalenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
exppможет лог покажешь?
а что в нем можно увидеть, если запрос хибернейтом создается на подобии вот этого
Код: plaintext
1.
2.
3.
4.
5.
select r.locality_id as id, ln.name as name, r.region_code as abbreviation
from region r 
    left join region_locality_names rln ON rln.region = r.locality_id " +
        left join locality_name ln on ln.locality_name_id = rln.locality_names  
WHERE r.country = :countryId and ln.locale_index = :localeIndex

разница от рабочего запроса в том, что условие на ln.locale_index = :localeIndex находится в WHERE и в этом случае LEFT JOIN до одного места, а в рабочем запросе на SQL это условие находится в LEFT JOIN - в этом случае, если в таблице locality_name нет записи то и условие не будет отрабатывать
...
Рейтинг: 0 / 0
07.08.2007, 20:59:09
    #34712338
Oleg Marshalenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
ncrв примере Oleg Marshalenko я не совсем понял что являет собой какая таблица
есть таблица region, которая содержит id и код региона;
есть таблица region_locality_names - она связывает таблицы region и locality_name;
и есть таблица locality_name где хранятся уникальные названия регионов и городов на разных языках.

В java это описано так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Entity
@Table(name = "region")
 public   class  Region  extends  Locality {

    @Column(name = "region_code", length =  2 )
     private  String regionCode;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    List<LocalityName> localityNames =  new  ArrayList<LocalityName>();
....
....


и класс LocalityName
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Entity
@Table(name = "locality_name")
 public   class  LocalityName {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "locality_name_id")
     private   long  localityNameId;

     private  String name;

    @Column(name = "locale_index")
     private   int  localeIndex;

....
....
...
Рейтинг: 0 / 0
07.08.2007, 21:34:26
    #34712383
Не получается написать запрос на HQL.
Oleg Marshalenko exppможет лог покажешь?
а что в нем можно увидеть, если запрос хибернейтом создается на подобии вот этого
Код: plaintext
1.
2.
3.
4.
5.
select r.locality_id as id, ln.name as name, r.region_code as abbreviation
from region r 
    left join region_locality_names rln ON rln.region = r.locality_id " +
        left join locality_name ln on ln.locality_name_id = rln.locality_names  
WHERE r.country = :countryId and ln.locale_index = :localeIndex

разница от рабочего запроса в том, что условие на ln.locale_index = :localeIndex находится в WHERE и в этом случае LEFT JOIN до одного места, а в рабочем запросе на SQL это условие находится в LEFT JOIN - в этом случае, если в таблице locality_name нет записи то и условие не будет отрабатывать

maybe "with" would help?
hibernate referencefrom Cat as cat
left join cat.kittens as kitten
with kitten.bodyWeight > 10.0
...
Рейтинг: 0 / 0
08.08.2007, 01:49:58
    #34712566
Oleg Marshalenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
Спасибо большое!

Вот получился рабочий HQL:
Код: plaintext
1.
2.
3.
4.
SELECT r.localityId, ln.name, r.regionCode FROM Region AS r 
LEFT JOIN r.localityNames AS ln WITH ln.localeIndex = :localeIndex 
WHERE r.country.localityId = :countryId 
ORDER BY ln.name
...
Рейтинг: 0 / 0
08.08.2007, 10:52:35
    #34713065
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
Oleg Marshalenko..., что условие на ln.locale_index = :localeIndex находится в WHERE и в этом случае LEFT JOIN до одного места, а в рабочем запросе на SQL это условие находится в LEFT JOIN - в этом случае, е сли в таблице locality_name нет записи то и условие не будет отрабатывать

я вобще-то думал,что в sql типа tristate logic и условия на нулевые кортежи можно накладывать.
в чём проблема когда все праметры стоят в where ?
...
Рейтинг: 0 / 0
08.08.2007, 11:13:27
    #34713142
Не получается написать запрос на HQL.
expp Oleg Marshalenko..., что условие на ln.locale_index = :localeIndex находится в WHERE и в этом случае LEFT JOIN до одного места, а в рабочем запросе на SQL это условие находится в LEFT JOIN - в этом случае, е сли в таблице locality_name нет записи то и условие не будет отрабатывать

я вобще-то думал,что в sql типа tristate logic и условия на нулевые кортежи можно накладывать.
в чём проблема когда все праметры стоят в where ?
не понял. Как сделать лефт джойн через предикат? Можно конечно вывернуться дополнительным предикатом с проверкой на null, но зачем, если есть лефт джойн?

ЗЫ. Я люблю, когда условия джойна записываются в самом джойне, а условие выборки - в предикате.
...
Рейтинг: 0 / 0
08.08.2007, 11:22:22
    #34713173
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
в чём, бли проблема с

Код: plaintext
1.
2.
3.
SELECT r.localityId, ln.name, r.regionCode FROM Region AS r 
LEFT JOIN r.localityNames AS ln 
WHERE r.country.localityId = :countryId AND ln.localeIndex = :localeIndex 
ORDER BY ln.name

это не работает?
...
Рейтинг: 0 / 0
08.08.2007, 11:24:30
    #34713180
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается написать запрос на HQL.
expp Oleg Marshalenko..., что условие на ln.locale_index = :localeIndex находится в WHERE и в этом случае LEFT JOIN до одного места, а в рабочем запросе на SQL это условие находится в LEFT JOIN - в этом случае, е сли в таблице locality_name нет записи то и условие не будет отрабатывать

я вобще-то думал,что в sql типа tristate logic и условия на нулевые кортежи можно накладывать.
в чём проблема когда все праметры стоят в where ?
учи матчасть .
...
Рейтинг: 0 / 0
08.08.2007, 11:26:31
    #34713188
Не получается написать запрос на HQL.
exppв чём, бли проблема с

Код: plaintext
1.
2.
3.
SELECT r.localityId, ln.name, r.regionCode FROM Region AS r 
LEFT JOIN r.localityNames AS ln 
WHERE r.country.localityId = :countryId AND ln.localeIndex = :localeIndex 
ORDER BY ln.name

это не работает?
конечно нет!
предыдущий запрос не равен следующему
Код: plaintext
1.
2.
3.
SELECT r.localityId, ln.name, r.regionCode FROM Region AS r 
LEFT JOIN r.localityNames AS ln WITH ln.localeIndex = :localeIndex 
WHERE r.country.localityId = :countryId 
ORDER BY ln.name
...
Рейтинг: 0 / 0
04.09.2007, 09:47:44
    #34773365
Не получается написать запрос на HQL.
А как написать встроенный запрос? Или такое HQL не умеет?

вот имеется работающий запрос на SQL

SELECT Second.title, First.myID, MT.Systemtime,
FROM First, Second, (SELECT myID, Max(SystemTime) Systemtime FROM Third GROUP BY myID) MT
WHERE First.myID = Second.myID AND Second.myID=MT.myID
ORDER BY Length(First.myID), First.myID
...
Рейтинг: 0 / 0
05.09.2007, 10:27:13
    #34776559
Не получается написать запрос на HQL.
вот что получилось на HQL

SELECT Second.title, First.myID
FROM First, Second
WHERE First.myID = Second.myID
AND Second.myID=ANY(SELECT myID FROM Third GROUP BY myID)
ORDER BY Length(First.myID), First.myID

но при этом не получается достать поле Systemtime таблицы Third


может быть ктонибудь знает, можно ли использовать результат запроса
SELECT myID, MAX(Systemtime) FROM Third GROUP BY myID как таблицу в другом запросе?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Не получается написать запрос на HQL. / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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