powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Не получается написать запрос на HQL.
23 сообщений из 23, страница 1 из 1
Не получается написать запрос на HQL.
    #34710293
Oleg Marshalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получается написать запрос на 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
Не получается написать запрос на HQL.
    #34710375
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может лог покажешь?
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34710994
ncr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ncr
Гость
А почему бы, не раскрутить все это используя операторы явы?
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34711044
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а долго потому что будет
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34711077
ncr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ncr
Гость
почему долго то?
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34711590
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ncrА почему бы, не раскрутить все это используя операторы явы?
тогда поясни что имел ввиду
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34711859
ncr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ncr
Гость
Ну допустим имеется пару справочников (в примере Oleg Marshalenko я не совсем понял что являет собой какая таблица) и оперативная таблица.
Для справочников получаем полный набор записей (допустим в HashMap<код, сущность>) для оперативной таблицы получаем записи по какому то критерию (т.к. все они редко когда нужны), далее по коду из оперативной таблицы берем значение из хешмапа.
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34712029
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вас поздравляю, но это откровенное извращение, которое даже не обсуждается

что-то по моему у хорстмана было ... мол не пишите SQL сервер на HashMap-ах
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34712079
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае это правда - реализовавать nested loops на хэш мапах - жжесть.
Но, как обычно, в отдельных случаях у такого подхода могут быть плюсы.
К примеру, lookup по read-only таблице в ахриненных количествах.
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34712116
ncr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ncr
Гость
А можно в таком случае услышать правильный подход для решения такого рода задач?
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34712165
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ncrА можно в таком случае услышать правильный подход для решения такого рода задач?
SQL :)
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34712181
ncr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ncr
Гость
В смысле HQL???
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34712330
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 нет записи то и условие не будет отрабатывать
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34712338
Oleg Marshalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Не получается написать запрос на HQL.
    #34712383
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
Не получается написать запрос на HQL.
    #34712566
Oleg Marshalenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое!

Вот получился рабочий 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
Не получается написать запрос на HQL.
    #34713065
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg Marshalenko..., что условие на ln.locale_index = :localeIndex находится в WHERE и в этом случае LEFT JOIN до одного места, а в рабочем запросе на SQL это условие находится в LEFT JOIN - в этом случае, е сли в таблице locality_name нет записи то и условие не будет отрабатывать

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

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

ЗЫ. Я люблю, когда условия джойна записываются в самом джойне, а условие выборки - в предикате.
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34713173
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

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

я вобще-то думал,что в sql типа tristate logic и условия на нулевые кортежи можно накладывать.
в чём проблема когда все праметры стоят в where ?
учи матчасть .
...
Рейтинг: 0 / 0
Не получается написать запрос на HQL.
    #34713188
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
Не получается написать запрос на HQL.
    #34773365
А как написать встроенный запрос? Или такое 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
Не получается написать запрос на HQL.
    #34776559
вот что получилось на 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
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Не получается написать запрос на HQL.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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