powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + запрос с пользовательской функцией
27 сообщений из 27, показаны все 2 страниц
Hibernate + запрос с пользовательской функцией
    #37615866
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С хибером общаюсь относительно недавно(а мое прошлое дает о себе знать) я хотеть использовать в запросе какую либо пользовательскую функцию, что нибудь вроде:
"select * from entity where MyClass.myStatMethod(id)"
Такое возможно?
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615877
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего нет. Разбейте это на вычисление значения функции и подстановку в полученного значения в запрос.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615880
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинС хибером общаюсь относительно недавно(а мое прошлое дает о себе знать) я хотеть использовать в запросе какую либо пользовательскую функцию, что нибудь вроде:
"select * from entity where MyClass.myStatMethod(id)"
Такое возможно?
только в СУБД с прекомпиляцией для ускорения UDF
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615889
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom,

хорошо - тогда чуть иначе.
В таблице 2 поля(id, text). Значения первого поля = int (описания поля в сущности @Enumerated(value = EnumType.ORDINAL) сейчас это около 19 макс).
Значение второго поля хотелось бы вычислить из первого, что нить вроде описание поля в сущности @Enumerated(value = EnumType.STRING).
или
if id=1 text="id1"
if id=2 text="id2"
if id=3 text="id3"

Так как данных очень не мало, не хотелось бы делать выборку объектов, все их исправлять, а потом апдейтить.

Сама задача возникла в результате merge нескольких веток и в последующем вряд ли понадобиться.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615896
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,
- занафига это надо? Составной ключик?
- ОДНИМ SQL запросом на Update
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615905
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

так чтобы обновить одним запросом ..нужен запрос вида:
"update e set text=MyClass.myMethod(id)"
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615913
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинPetro123,
так чтобы обновить одним запросом ..нужен запрос вида:
"update e set text=MyClass.myMethod(id)"
я в это HQL\ORM не врубаюсь :)
- надо в СУБД
Код: java
1.
UPDATE tabla set text='id' + ToString(id)
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615938
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

ну я примитивно привел логику обновления поля text )
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
enum MyEnum{
 SECOND(),  
 MINUTE(),
 HOUR(),

 private MyEnum() {

 }

}



Так вот, на данный момент в таблице есть поле id - которое хранит порядок перечисления(1,2,3), я добавляю поле text=которое будет хранить SECOND, MINUTE, HOUR. При первом старте надо обновить поле text по существующим id ) согласно моему MyEnum
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615962
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,
оператор SQL decode вроде можно в SQL

Код: sql
1.
decode(s."SUBJID", 37, '1. Предпроектная', 38, '2. Конкурсная', 39, '3. Проектная', 29, '4. Строительство')
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615966
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё сложнее условия, уже CASE, но его вроде только в VIEW
Поэтому на СУБД я бы решал в динамике = VIEW с CASE над таблицей
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37615992
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

ok, спс;)
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616355
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
enum MyEnum{
 SECOND(),  
 MINUTE(),
 HOUR(),

 private MyEnum() {

 }

}



Так вот, на данный момент в таблице есть поле id - которое хранит порядок перечисления(1,2,3), я добавляю поле text=которое будет хранить SECOND, MINUTE, HOUR. При первом старте надо обновить поле text по существующим id ) согласно моему MyEnum
это тоже абстрактный пример или уже то, что действительно надо сделать? если второе, то вопрос - зачем?
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616382
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
off
chpasha,
ну ему наверно приказали, да и всё.
Если защищать ОРМ, то наверно тоже есть варианты:
- вычисляемое поле замаппить (фальшивое)
- это справочник и его можно штатно завести в системе.
- это лог поминутный и
куча если :)
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616402
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123off
chpasha,
ну ему наверно приказали, да и всё.
я потому и спрашиваю. на лицо ненужное дублирование информации. уже есть энум, и уже есть его порядковое представление в бд. любое текстовое представление из порядкового можно получить автоматом из энума.

Petro123Если защищать ОРМ, то наверно тоже есть варианты:
просто вводится новая пользовательская функция в диалект, например

Код: java
1.
registerFunction("to_hours", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "floor(extract(epoch from ?1)/3600)"));


а дальше пишется HQL как и хотел автор. но пока не очевидно нужно ли это.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616409
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
+1
значит есть аналог UDF - круто
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616427
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123chpasha,
+1
значит есть аналог UDF - круто
это не аналог, это и есть пользовательская функция (или любая другая). HQL передает ее как есть дальше на сервер. это пример, как расширить доступные в HQL функции своими путем кастомизации диалекта. точно так же можно ввести дополнительный тип, который может преобразовывать на лету 1,2,3 в SECONDS, HOURS и т.д. потому и не ясно, зачем их хранить явно.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616453
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

я ж говорил причину, на период merge бранча и транка(когда работают старые версии программ и ставятся новые) нужна подобная функциональность и дублирование информации.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616455
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

как создать на лету пользовательскую ф-ю в базе я знаю )
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616461
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

блин, но пример с секундами и минутами абстрактный...там более слонжые названия перечисляемых полей, зачем так буквально воспринимать? Контекст задачи важен, а не данные..представьте, что перечисление абстрактное.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616473
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинchpasha,

я ж говорил причину, на период merge бранча и транка(когда работают старые версии программ и ставятся новые) нужна подобная функциональность и дублирование информации.
т.е. если по-русски, есть код, который зависит от наличия этого поля, так?
имхо более лаконичным будет табличная функция: массив типа ['','SECDONDS','MINUTES'] и т.д. где позиция соответствует порядковому номеру. ee и вызывать. но для одного раза можно и update с case, и не понятно зачем для одного раза ОРМ приплетать. тут как раз работа для JDBC.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616480
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинchpasha,
там более слонжые названия перечисляемых полей, зачем так буквально воспринимать?
мой пример тоже абстрактный, это совпадение, что он с датами работает.

если нужно многократно - функция на стороне сервера. если однократно - скрипт на JDBC и забыл.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616498
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaОзверинchpasha,

я ж говорил причину, на период merge бранча и транка(когда работают старые версии программ и ставятся новые) нужна подобная функциональность и дублирование информации.
т.е. если по-русски, есть код, который зависит от наличия этого поля, так?
имхо более лаконичным будет табличная функция: массив типа ['','SECDONDS','MINUTES'] и т.д. где позиция соответствует порядковому номеру. ee и вызывать. но для одного раза можно и update с case, и не понятно зачем для одного раза ОРМ приплетать. тут как раз работа для JDBC.

ну орм приплетать потому что стандартных средств JDBC я не знаю для решения подобной задачи, а создание ф-и на лету придется прилично "кодировать" рефлексию, т.к. merge может длиться месяц другой, а логика на месте не стоит ;) В любом случае спасибо, буду думать дальше.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616523
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинну орм приплетать потому что стандартных средств JDBC я не знаю для решения подобной задачи
для одноразового апдейта самое то. хотя я начинаю подозревать, что видимо не понимаю задачу. потому что проапдейтить данные один раз можно десятком способов. или речь именно о select * where?

Озверин, а создание ф-и на лету придется прилично "кодировать" рефлексию
почему налету? если мы все еще об энумах, то закодировать существующие состояния + добавлять новые.

кстати как на счет динамически генерить where с помощью criteria, имхо они как раз для этого.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616543
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

одноразовый апдейт не сгодится , т.к. с одной базой могут работать и старые версии и новые.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616584
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинchpasha,
одноразовый апдейт не сгодится , т.к. с одной базой могут работать и старые версии и новые.
почему?
У меня в БД был флаг версии и на клиенте. Клиент стартуя, проверяет версию и либо кричит, либо сам ОДНОРАЗОВО апдейтит.
В 1С тоже так.
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616594
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

а у меня в квартире газ ;) What You See Is What You Get.
Учитывая задачу - надо приложить минимальные усилия ;))
...
Рейтинг: 0 / 0
Hibernate + запрос с пользовательской функцией
    #37616608
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин, да, развели тут бодягу.... Удачи!
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + запрос с пользовательской функцией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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