powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Новые веяния
79 сообщений из 79, показаны все 4 страниц
Новые веяния
    #39980292
xerxf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последнее время делаю довольно много code review и замечаю такую вещь - пошло прямо таки какое то повальное увлечение переусложнением кода. Что это - не понимание сути и попытка впихнуть везде, где только можно свежеполученные знания или реальная необходимость, которой я никак не могу проникнуться?
Как пример:
Есть некая функция. которая что то там делает, но основная логика скрыта в вызываемой библиотечной функции. Эта библиотечная функция синхронизированна. И возвращает список. причём эта библиотечная функция в классе-синглтоне.
По логике программы эта функция должна вызываться в цикле несколько раз с разными параметрами. Программист оборачивает функцию в Future, внутри результаты работы библиотечной функции пишет в потокобезопасную коллекцию(причём над коллекцией он тоже сделал обёртку-синглтон), и все эти фьчерсы засылает в CompletableFuture.allOf. А по whenComplete выбирает данные из потокобезопасной коллекции и что то с ними делает. Вопрос - а зачем так сложно? всё равно же всё споткнётся на синхронизированном методе ( а там кроме него по сути и нет ничего) и будет выполняться фактически последовательно, без всякого парралелилизма?
Или ещё - функция возвращает строку. Эта строка передаётся в другую функцию. Другая функция этой строке что то там ищет. Всё. Зачем первая функция строку оборачивает в Option ? Не, я всё понимаю - функциональщина, защита от null и всё такое.. Но как бы любые лишние телодижения - это лишние тормоза и каждая лишняя строчка - это потенциальный источник проблем (все мы человеки - чем больше напишешь, тем больше вероятость ошибки) зачем это всё? особенно если первая функция гарантированно возвращает не null
Или ещё - есть некие действия, которые нужно делать в отдельном потоке. Данные для них приходят периодичеки. Для каждой приходящей порции данных создаётся свой поток, в нём по каким то условиям стартуют ещё потоки, там создаются какие то фьючерсы, а потом это всё долго и мучительно синхронизируется.... Но там всё что надо - это чтобы данные обрабатывались НЕ в основном потоке. И абсолютно наплевать, в одном потоке они обработаются или в 10.. После того, как все эти сложности повыкидывал - необходимость в синхронизации вообще отпала. и работать всё стало в разы стабильнее. Опять таки - что это было ? непонимание потоков автором или я опять что то не понимаю в современном стиле программирования на java ? А то я когда то на плюсах начинал - может такое отношение ко всем этим наворотам это просто издержки моего прошлого ?
...
Рейтинг: 0 / 0
Новые веяния
    #39980309
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xerxf,

чет у вас в достаточно тяжелой форме все проходит. Я только замечал повальное стремление заменить все подряд на java.util.function.*, чтобы потом невозможно было найти реализацию. А так ваш коллега скорее всего имеет опыт разработки на JS - там только так и пишут.
...
Рейтинг: 0 / 0
Новые веяния
    #39980312
xerxf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,

Да, реализацию найти тоже проблематично. Обёртка над обёрткой, а там функциональщина..
Просто ыглядит красиво, солидно, модно, стильно, молодёжно. Я бы тупо написал вызов функции в цикле с накоплением результата. А там накручено - выглядит уж больно солидно
Я писал на js - стиль может и похож, но не помню бесмысленного на мой взгляд переусложнения.
Я пытаюсь понять - оно бессмысленно только на мой взгляд или одно из двух...
...
Рейтинг: 0 / 0
Новые веяния
    #39980344
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xerxf
Последнее время делаю довольно много code review и замечаю такую вещь - пошло прямо таки какое то повальное увлечение переусложнением кода.


Как начал программировать не один так и замечаю.
Не от языка это зависит. Да и не новое это.
Просто умение писать кратко и понятно- это нечастое и очень ценное умение.
...
Рейтинг: 0 / 0
Новые веяния
    #39980368
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это пока всего лишь твои слова, которым мы можем либо доверять либо нет. Тут говорится 50\50, не видя кода сложно сказать прав ты или нет, всегда есть вероятность что ты реально чего-то не понимаешь. Но для этого и есть code review - чтобы задавать вопросы а почему так а не эдак? Странным выглядит твой вопрос тут а не в PR.
Что касается вопросов
1) А вдруг реализация библиотечной функции изменится, либо вы ее вообще выкинете и перепишете на свое, забыв про синхронизацию?
2) А может все-таки там нулл возможен? Либо вторая функция используется в нескольких местах, и в каком то месте туда реально может придти опшионал?
3) Ну тут вообще нифига непонятно, ты тесты многопоточные написал что реализация корректна до твоих изменений и после?
...
Рейтинг: 0 / 0
Новые веяния
    #39980394
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Это пока всего лишь твои слова, которым мы можем либо доверять либо нет. Тут говорится 50\50

+1
...
Рейтинг: 0 / 0
Новые веяния
    #39980417
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xerxf
Андрей Панфилов,

Да, реализацию найти тоже проблематично. Обёртка над обёрткой, а там функциональщина..
Просто ыглядит красиво, солидно, модно, стильно, молодёжно. Я бы тупо написал вызов функции в цикле с накоплением результата. А там накручено - выглядит уж больно солидно
Я писал на js - стиль может и похож, но не помню бесмысленного на мой взгляд переусложнения.
Я пытаюсь понять - оно бессмысленно только на мой взгляд или одно из двух...

вызов функции в цикле с накоплением. какой то прошлый век )) функциональщина и проще и понятнее ведь? в разумных пределах разумеется.
...
Рейтинг: 0 / 0
Новые веяния
    #39980420
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя на ней все шизанулись. смотрю ваки скалы. всем подавай катс и зио. причем по зио опыт 3 года минимум. Типа если ты не пишешь на зио - ты ничтожество. и да. 3 года. не меньше. с учетом того что этому "фреймворку" год от силы. всем подавай самое новое.
...
Рейтинг: 0 / 0
Новые веяния
    #39980422
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник

А вдруг реализация библиотечной функции изменится, либо вы ее вообще выкинете и перепишете на свое, забыв про синхронизацию?

Аргумент просто пи....ц какой-то
Если бы, да кабы
А если в функции вызовут System.exec( "halt"); ? Что делать? Все пропало!

Чувствую, что CompletableFuture там недостаточно. Код говно. Обязательно нужно не забыть обернуть еще в HaltFuture, OutOfMemoryFuture и в другие такие же полезные классы. Только этим путем проект еще можно спасти!
...
Рейтинг: 0 / 0
Новые веяния
    #39980439
nnalogovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник

1) А вдруг реализация библиотечной функции изменится, либо вы ее вообще выкинете и перепишете на свое, забыв про синхронизацию?


А вдруг в проект придет сумасшедший блатной кодер - который удалит весь код
...
Рейтинг: 0 / 0
Новые веяния
    #39980457
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и пошел спор о сферических конях в вакууме. пусть ТС запостит код, тогда и поговорим о вариантах
...
Рейтинг: 0 / 0
Новые веяния
    #39980489
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Появились конструкции, которые могут помочь сделать код ассинхронным, многопоточным, быстрым и более устойчивым к ошибкам.
Но автоматически, сам собой, код все равно таким не станет . Для ассинхроннсоти все равно нужно продумывать, как осмысленно разруливать коллезии. Для ускорения все равно нужно профайлить и разбираться где и почему затыки.

А в реальной жизни происходит подмена понятий, люди начинают считать, что если они запихнут эти конструкции куда нужно и куда не нужно, то код станет таким сам собой , волшебным образом.
Если у нас в коде CompletableFuture - значит, sic!, код ассинхронный, многопоточный и быстрый по определение!
Если у нас в коде Option - значит ошибок у нас нет! мы же все пишем в соответствии с мировыми практиками.

Если весь проект набит CompletableFuture, Option, но почему-то затыкается на 600 инсертах в секунду, то это PostgreSQL виноват ))) и нужно добавить ака, кафку и редиса для большей асинхронности и скорости )))
/тут смайлики! все совпадения с какими нибудь темами на форуме совершенно случайны/
...
Рейтинг: 0 / 0
Новые веяния
    #39980511
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
забыл ник

А вдруг реализация библиотечной функции изменится, либо вы ее вообще выкинете и перепишете на свое, забыв про синхронизацию?

Аргумент просто пи....ц какой-то
Если бы, да кабы
А если в функции вызовут System.exec( "halt"); ? Что делать? Все пропало!

Чувствую, что CompletableFuture там недостаточно. Код говно. Обязательно нужно не забыть обернуть еще в HaltFuture, OutOfMemoryFuture и в другие такие же полезные классы. Только этим путем проект еще можно спасти!

Аргумент в том, что мы не знаем код, что не мешает делать выводы о праивльности\неправильности. Я конечно не против ваших фантазий, только при чем они к тому что я написал?
...
Рейтинг: 0 / 0
Новые веяния
    #39980512
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nnalogovik
забыл ник

1) А вдруг реализация библиотечной функции изменится, либо вы ее вообще выкинете и перепишете на свое, забыв про синхронизацию?


А вдруг в проект придет сумасшедший блатной кодер - который удалит весь код

Складывается впечатление что я должен обьяснить код, который не писал. Наверное ты видел тот код?
...
Рейтинг: 0 / 0
Новые веяния
    #39980513
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Появились конструкции, которые могут помочь сделать код ассинхронным, многопоточным, быстрым и более устойчивым к ошибкам.
Но автоматически, сам собой, код все равно таким не станет . Для ассинхроннсоти все равно нужно продумывать, как осмысленно разруливать коллезии. Для ускорения все равно нужно профайлить и разбираться где и почему затыки.

А в реальной жизни происходит подмена понятий, люди начинают считать, что если они запихнут эти конструкции куда нужно и куда не нужно, то код станет таким сам собой , волшебным образом.
Если у нас в коде CompletableFuture - значит, sic!, код ассинхронный, многопоточный и быстрый по определение!
Если у нас в коде Option - значит ошибок у нас нет! мы же все пишем в соответствии с мировыми практиками.

Если весь проект набит CompletableFuture, Option, но почему-то затыкается на 600 инсертах в секунду, то это PostgreSQL виноват ))) и нужно добавить ака, кафку и редиса для большей асинхронности и скорости )))
/тут смайлики! все совпадения с какими нибудь темами на форуме совершенно случайны/

Это все правильно. Вопрос в том, какая ситуация соотвествует действительности
1) Все написано правильно, просто ТС в силу отсутствия знаний не понимает почему написано именно так и делает поспешные выводы
2) Все действительно плохо и код ужасный.
Не видя кода отличить 1 от 2 не имеется практической возможности.
Можно конечно дальше сотрясать форум возмущением, только это имеет мало смысла
...
Рейтинг: 0 / 0
Новые веяния
    #39980522
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже имея код, делать какие-то выводы нельзя

В команде должен быть обшепринятый стиль работы более-менее удобный, понятный и принятый всеми (или общепринятый пофигизм, что тоже является стилем)

С одной стороны:
Если кто-то новый пришел в команду и еще не вписался в данный стиль - на коде review его должны поправить
Если он так и не смог вписаться, а его коллегам такой стиль удобен - он будет создавать проблемы окружающим, рано или поздно его пошлют нафиг )))

С другой стороны:
Если правила в данной компании не устраивают, будь это зарплата, качество кофе и печенюшек в офисе, дресс код или идиотские требования к коду - нужно искать новое место работы
Можно попытаться быть д'Артаньяном и что-то менять в мире вокруг себя, можно тихо смириться и попытаться быть как все, можно поискать другое место.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Новые веяния
    #39980545
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
на счет этих Completeble фьюч согласен - везде напичкано
на код смотришь ничего не понятно - по полдня тратишь на поиски правды)

Ну это эпичный пример неуклюжей попытки пропихнуть функциональный концепт из скалы в java, не понимая что лучше чем портировать часть решения - не портировать ничего. С опшинал примерно тоже самое.
А теперь попробую рассказать откуда у этого все ноги растут. Все эти Completable Future - это по сути колббаки или continuation. В скале и ФП есть такое понятие как монада. И вот там Future образует монаду(контекст continuation) которым легко и удобно пользоваться, который по сути всю асинхронность и сложность коллбэков превращает в зрительно императивный код.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
val getEmployee(id: Int) = Future(DB.load)
val getDepartment(emp: Employee) = Future(Db.load)
val getBonus(dep: department) = Future(DB.load)

val result: Future[Bonus] = for { // тут мы как бы входим в контекст Future, то есть убираем этот враппер
  e <- getEmployee(1) -- тут работаем с энтити типами, никаких future
  d <- getDepartment(e)
  b <- getBonus(d)
} yield b //Обратно запаковываем во future


Тут все элегантно и красиво в отличие от java-ского
future.thenAsync().orElseThrow бла бла
...
Рейтинг: 0 / 0
Новые веяния
    #39980596
nnalogovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник
nnalogovik
пропущено...


А вдруг в проект придет сумасшедший блатной кодер - который удалит весь код

Складывается впечатление что я должен обьяснить код, который не писал. Наверное ты видел тот код?


Да не меня просто всегда впечатляли придирки к коду типа


"А что если придет джун - и не поймет тут эту функцию, напишет вот так и тогда все ляжет"
...
Рейтинг: 0 / 0
Новые веяния
    #39980598
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nnalogovik
забыл ник
пропущено...

Складывается впечатление что я должен обьяснить код, который не писал. Наверное ты видел тот код?


Да не меня просто всегда впечатляли придирки к коду типа


"А что если придет джун - и не поймет тут эту функцию, напишет вот так и тогда все ляжет"


Вообще это цель любого API - чтобы тот кто будет использовать его, с наименьшей вероятностью допустил ошибку. Для этого на разных уровнях абстракции возможно поддерживать системные инварианты. Как например, что ни при каких раскладах система должна быть потокобезопасной. Кто знает как там было - может система была кастомная с кучей кода, а потом появилась либа которая делает тоже самое, только синхронизация у нее внутри, ну вот старый код выкинули а синхронизацию на всякий оставили(вдруг появится еще какая либа еще) и т.д и т.п. Так что да, аргумент вдруг придет джун он иногда имеет смысл
...
Рейтинг: 0 / 0
Новые веяния
    #39980603
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как у нас: "а вдруг придет кто-то без знания HQL, давайте писать все запросы в Hibernate на Criteria-API". Никто без знания SQL/HQL так пока и не пришел, а ежики колются и пишут годами во всех проектах строго на Criteria-API :(
...
Рейтинг: 0 / 0
Новые веяния
    #39980608
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
как у нас: "а вдруг придет кто-то без знания HQL, давайте писать все запросы в Hibernate на Criteria-API". Никто без знания SQL/HQL так пока и не пришел, а ежики колются и пишут годами во всех проектах строго на Criteria-API :(

Ну тут надо все взвешивать. Если бизнес выиграет от переписывания(так как снизится цена поддержки и увеличится быстрота написания кода) и риск небольшой - то надо планировать таск и делать. Другое дело, что если риск того что система еб..тся и фирма потеряет миллионы долларов хотя бы чуть-чуть больше нуля - то нет и не может быть никакого разговора о переписывании.
...
Рейтинг: 0 / 0
Новые веяния
    #39980621
nnalogovik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник
nnalogovik
пропущено...


Да не меня просто всегда впечатляли придирки к коду типа


"А что если придет джун - и не поймет тут эту функцию, напишет вот так и тогда все ляжет"


Вообще это цель любого API - чтобы тот кто будет использовать его, с наименьшей вероятностью допустил ошибку. Для этого на разных уровнях абстракции возможно поддерживать системные инварианты. Как например, что ни при каких раскладах система должна быть потокобезопасной. Кто знает как там было - может система была кастомная с кучей кода, а потом появилась либа которая делает тоже самое, только синхронизация у нее внутри, ну вот старый код выкинули а синхронизацию на всякий оставили(вдруг появится еще какая либа еще) и т.д и т.п. Так что да, аргумент вдруг придет джун он иногда имеет смысл



Все это от лукавого и ну очень натянуто

Джун если тупой - он и в самом хорошем API грабли найдет и на них наступит

А если умный - и с проблемным разберется


Не нужно на джуна перекладывать свои страхи и придирки
...
Рейтинг: 0 / 0
Новые веяния
    #39980684
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
как у нас: "а вдруг придет кто-то без знания HQL, давайте писать все запросы в Hibernate на Criteria-API". Никто без знания SQL/HQL так пока и не пришел, а ежики колются и пишут годами во всех проектах строго на Criteria-API :(

Имхо критериа апи гораздо сложнее и к чтению и к пониманию нежели хкл или жпкл. Те хоть на скуль издали одним глазом похожи.
...
Рейтинг: 0 / 0
Новые веяния
    #39980685
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Zzz79
на счет этих Completeble фьюч согласен - везде напичкано
на код смотришь ничего не понятно - по полдня тратишь на поиски правды)

Ну это эпичный пример неуклюжей попытки пропихнуть функциональный концепт из скалы в java, не понимая что лучше чем портировать часть решения - не портировать ничего. С опшинал примерно тоже самое.
А теперь попробую рассказать откуда у этого все ноги растут. Все эти Completable Future - это по сути колббаки или continuation. В скале и ФП есть такое понятие как монада. И вот там Future образует монаду(контекст continuation) которым легко и удобно пользоваться, который по сути всю асинхронность и сложность коллбэков превращает в зрительно императивный код.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
val getEmployee(id: Int) = Future(DB.load)
val getDepartment(emp: Employee) = Future(Db.load)
val getBonus(dep: department) = Future(DB.load)

val result: Future[Bonus] = for { // тут мы как бы входим в контекст Future, то есть убираем этот враппер
  e <- getEmployee(1) -- тут работаем с энтити типами, никаких future
  d <- getDepartment(e)
  b <- getBonus(d)
} yield b //Обратно запаковываем во future


Тут все элегантно и красиво в отличие от java-ского
future.thenAsync().orElseThrow бла бла

В скалке так же можешь писать мапами флатмапами. Мало будет отличаться от джавы. Но джава да уже морально устарела. Насчет читаемости форкомпрехеншена это тоже имхо субъективное мироощущение думая что они более элегантные.
...
Рейтинг: 0 / 0
Новые веяния
    #39980761
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
Имхо критериа апи гораздо сложнее и к чтению и к пониманию нежели хкл или жпкл. Те хоть на скуль издали одним глазом похожи.

имхо тоже, особенно когда начинаются join-ы и подзапросы. так это я еще пол истории рассказал, на самом деле это даже не Criteria-API, а нечто критериа-подобное, т.е. велосипед по сути, в котором до 5 хибера даже left-join не работали. паноптикум короче
...
Рейтинг: 0 / 0
Новые веяния
    #39980781
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
andreykaT
Имхо критериа апи гораздо сложнее и к чтению и к пониманию нежели хкл или жпкл. Те хоть на скуль издали одним глазом похожи.

имхо тоже, особенно когда начинаются join-ы и подзапросы. так это я еще пол истории рассказал, на самом деле это даже не Criteria-API, а нечто критериа-подобное, т.е. велосипед по сути, в котором до 5 хибера даже left-join не работали. паноптикум короче


чет вы страсти какие-то рассказываете... у Criteria-API есть compile-time валидация (это конечно если вы не профукали включить хиберовский annotation processor), одного только этого достаточно для обязательного применения Criteria-API и нивелирует все остальные недостатки, которых нет, потому что сложнее/легче - это никакой не критерий, а если же говорить про выразительность, то я знаю только один проблемный случай: сущности типа (child_id, parent_id) и нужно с двух сторон доставать - но это вообще косяк JPQL, потому что про UNION в нем забыли
...
Рейтинг: 0 / 0
Новые веяния
    #39980791
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон за офтоп
ребята есть ли кто живой из ЦРПТ по табачному направлению, жутко нужна консультация
зы Топик популярный
...
Рейтинг: 0 / 0
Новые веяния
    #39980804
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
Не от языка это зависит. Да и не новое это.
Да ладно, профессиональная деформация связанная с языком и предметной областью всегда имеет место быть: у тех кто пишет бэк за годы работы уже подсознательно отложилось, что "обрабатывать данные в контроллере западло", у тех кто пишет UI тоже подсознательное "обрабатывать данные в UI-потоке западло" - отсюда и CompletableFuture на ровном месте, если смотреть в сторону криптографии, то там у чуваков вместо API вообще какие-то помои, при этом "считается" что это якобы нормально То что недавно про микросервисы было: если возникла проблема с микросервисами, то это значит что у вас слишком мало микросервисов - нужно еще больше (или: обрабатывать данные у себя западло, пусто кто-то другой делает ).
...
Рейтинг: 0 / 0
Новые веяния
    #39980845
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
чет вы страсти какие-то рассказываете

чет у тебя Андрей с глазами проблемы, но ты, как всегда поспешаешь всех *уями обложить

цитирую еще раз

на самом деле это даже не Criteria-API, а нечто критериа-подобное, т.е. велосипед по сути

Андрей Панфилов
потому что сложнее/легче - это никакой не критерий

согласно кивает. сразу ведь понятно, что тут происходит, выразительно и лаконично
Код: java
1.
2.
3.
4.
5.
6.
7.
CriteriaQuery<Employee> query = criteriaBuilder.createQuery(Employee.class);
   Root<Employee> employee = query.from(Employee.class);
   ListJoin<Employee, Task> tasks = employee.join(Employee_.tasks);
   query.select(employee)
        .where(criteriaBuilder.equal(tasks.get(Task_.supervisor), employee.get(Employee_.name)));
   TypedQuery<Employee> typedQuery = entityManager.createQuery(query);
   List<Employee> employees = typedQuery.getResultList();


то ли дело
Код: java
1.
2.
3.
select  e from Employee e 
inner join fetch e.tasks 
where xxx"
...
Рейтинг: 0 / 0
Новые веяния
    #39980860
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
чет вы страсти какие-то рассказываете... у Criteria-API есть compile-time валидация (это конечно если вы не профукали включить хиберовский annotation processor), одного только этого достаточно для обязательного применения Criteria-API и нивелирует все остальные недостатки, которых нет, потому что сложнее/легче - это никакой не критерий, а если же говорить про выразительность, то я знаю только один проблемный случай: сущности типа (child_id, parent_id) и нужно с двух сторон доставать - но это вообще косяк JPQL, потому что про UNION в нем забыли


ИМХО Criteria API не удобная вещь.
Синтаксис сложный и запутанный. Легко написать фигню.
А потом долго отлаживать через логи, смотря какой запрос сгенерился.
По мне, удобнее использовать @Query c nativeQuery.
...
Рейтинг: 0 / 0
Новые веяния
    #39980886
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
Андрей Панфилов
чет вы страсти какие-то рассказываете

чет у тебя Андрей с глазами проблемы, но ты, как всегда поспешаешь всех *уями обложить

цитирую еще раз

на самом деле это даже не Criteria-API, а нечто критериа-подобное, т.е. велосипед по сути


Андрей Панфилов
потому что сложнее/легче - это никакой не критерий

согласно кивает. сразу ведь понятно, что тут происходит, выразительно и лаконично
Код: java
1.
2.
3.
4.
5.
6.
7.
CriteriaQuery<Employee> query = criteriaBuilder.createQuery(Employee.class);
   Root<Employee> employee = query.from(Employee.class);
   ListJoin<Employee, Task> tasks = employee.join(Employee_.tasks);
   query.select(employee)
        .where(criteriaBuilder.equal(tasks.get(Task_.supervisor), employee.get(Employee_.name)));
   TypedQuery<Employee> typedQuery = entityManager.createQuery(query);
   List<Employee> employees = typedQuery.getResultList();


то ли дело
Код: java
1.
2.
3.
select  e from Employee e 
inner join fetch e.tasks 
where xxx"



так...

Код: java
1.
CriteriaQuery<Employee> query = criteriaBuilder.createQuery(Employee.class);


и
Код: java
1.
2.
   TypedQuery<Employee> typedQuery = entityManager.createQuery(query);
   List<Employee> employees = typedQuery.getResultList();



никакого отношения к Criteria API не имеет - это инфраструктурный код, который никто не догадался загнать под капот. Остается только:

Код: java
1.
2.
3.
   ListJoin<Employee, Task> tasks = employee.join(Employee_.tasks);
   query.select(employee)
        .where(criteriaBuilder.equal(tasks.get(Task_.supervisor), employee.get(Employee_.name)));



код просто невероятно сложный (на самом деле он неправильный - я уже описывал почему)
...
Рейтинг: 0 / 0
Новые веяния
    #39980901
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

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

ну я и where еще подсократил - лень было дописывать, мы же не кол-во строчек собрались считать. смысла сказанного это не меняет

что происходит тут нужно вкуривать, кто тут на ком стоял
Код: java
1.
2.
3.
  ListJoin<Employee, Task> tasks = employee.join(Employee_.tasks);
   query.select(employee)
        .where(criteriaBuilder.equal(tasks.get(Task_.supervisor), employee.get(Employee_.name)));


а что тут
Код: sql
1.
2.
3.
4.
5.
entityManager.createQuery("""
      select  e from Employee e 
           inner join fetch e.tasks 
      where xxx
"""


понятно сразу много кому

а вот так, к слову, выглядит join "у нас "

Код: java
1.
2.
3.
4.
5.
QueryBuilder qb = QueryBuilder.select(Employee.class, "e");
qb.addCondition("xxx", false);

qb.addSource(Task.class, "t");
qb.addCondition("e.id = t.employeeId");



как ты любишь говорить, дичь ;) . Хотя все примеры не очень удачные, т.к. достаточно примитивные


Андрей Панфилов
а потом заявить что оппонент в глаза долбится.

я не говорил, что долбишься, но читаешь невнимательно и тут же шашкой махать
...
Рейтинг: 0 / 0
Новые веяния
    #39980998
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha

что происходит тут нужно вкуривать, кто тут на ком стоял
Код: java
1.
2.
3.
  ListJoin<Employee, Task> tasks = employee.join(Employee_.tasks);
   query.select(employee)
        .where(criteriaBuilder.equal(tasks.get(Task_.supervisor), employee.get(Employee_.name)));


а что тут
Код: sql
1.
2.
3.
4.
5.
entityManager.createQuery("""
      select  e from Employee e 
           inner join fetch e.tasks 
      where xxx
"""


понятно сразу много кому
Скажем так: "вкуривать, кто тут на ком стоял" и "понятно сразу много кому" понятия субъективные, и лично мне ни то, ни то совершенно непонятно, однако, уже по вполне объективной причине: то что написано - написано неверно: если мы хотим получить список задач, где исполнитель сам себе супервизор, то нужно брать и выбирать задачи, а не исполнителей, а если мы хотим получить исполнителей, у которых есть задачи, в которых они еще супервизоры - то нужно брать исполнителей, и рисовать in/exists, а не умножать на задачи чтобы еще и ассоциативные связи были битые ( 22150068 ).

Если заходить с другой стороны, то:
- здесь JPQL заработало пол-очка за счет text blocks (или что там у вас вместо 13-й жавы), завтра придут более новые веяния и кто-то решит что интерполяция строк мега крутая тема и обязательно к применению (и пофиг что в разных контекстах оно должно работать по-разному)
- билдер всегда лучше парсера, конкретно в вашем примере если завтра прилетят требования, что нужно накидать условий "в зависимости от фазы луны", то вся эта мнимая "красота" JPQL сведется на нет, а вот CriteriaQuery можно спокойно гонять по стэку, разбирать и обогащать, сложно - это не когда букв много, а когда приходится простые вещи делать через жопу.

chpasha

а вот так, к слову, выглядит join "у нас "

Код: java
1.
2.
3.
4.
5.
QueryBuilder qb = QueryBuilder.select(Employee.class, "e");
qb.addCondition("xxx", false);

qb.addSource(Task.class, "t");
qb.addCondition("e.id = t.employeeId");



как ты любишь говорить, дичь ;) . Хотя все примеры не очень удачные, т.к. достаточно примитивные

конечно дичь: типизации никакой, еще и алиасы какие-то добавили, которых в предметной области отродясь не было.

chpasha

Андрей Панфилов
а потом заявить что оппонент в глаза долбится.

я не говорил, что долбишься, но читаешь невнимательно и тут же шашкой махать

мы как только искоренили JPQL, так сразу количество ошибок резко сократилось, здесь, на мой взгляд, вывод о том что нужно, а что не нужно использовать, совершенно очевидный.
...
Рейтинг: 0 / 0
Новые веяния
    #39981014
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
лично мне ни то, ни то совершенно непонятно, однако, уже по вполне объективной причине: то что написано - написано неверно: если мы хотим получить список задач, где исполнитель сам себе супервизор
да это первый попавшийся пример из гугла


Андрей Панфилов
если завтра прилетят требования, что нужно накидать условий

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

Андрей Панфилов
конечно дичь

о чем и спич

Андрей Панфилов
мы как только искоренили JPQL, так сразу количество ошибок резко сократилось
х.з. какие выводы можно сделать по одной истории успеха ;) - мне иногда приходится запускать запрос на выполнение, чтоб допереть какой sql из этой хрени генерится и соотвественно, что хотел сказать автор.
...
Рейтинг: 0 / 0
Новые веяния
    #39981020
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha

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

Много писал SQL.

Но что понимают под словами "разветвленных условий" мне вообще не понятно
"переиспользования кусков" так же не очень понятный термин, никаких проблем с клавишами Ctrl-C, Ctrl-v в моей среде разработки (PL SQL Developer) нет

Нафига нужен какой-то там Criteria API лично мне не понятно. Если нужно сбилдить SQL команду, мне вполне хватает StringBuffer.append + PreparedStatement.set()
/если меняется кол-во параметров на входе, это конечно нужно отслеживать, но чем тут поможет CriteriaAPI мне так же не ясно/

Если речь про интерфейсы типа Query-By-Example (термин Oracle Forms), то они должны делаться один раз на системной уровне (что Oracle Forms, что Oracle ADF) и никого не парят.
...
Рейтинг: 0 / 0
Новые веяния
    #39981052
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Если нужно сбилдить SQL команду, мне вполне хватает StringBuffer.append + PreparedStatement.set()
не хватит:
- фильтры не только в хвосте запроса (where), а еще и в середине (join)
- а еще у джойнов есть алиасы
- а еще у биндов есть имена
- а еще есть подзапросы
- а еще бывает что кто-то добавляет, переименовывает и даже(!) удаляет колонки в таблицах
- а еще хочется чтобы за ввод пользователя, бизнесовые критерии и ограничения ИБ отвечали разные слои

вероятность того, что это можно что-то слепить на каком-нибудь mustache куда выше чем на StringBuffer.append
...
Рейтинг: 0 / 0
Новые веяния
    #39981064
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
проблема в том, что есть масса запросов, простых как дерево, где он имхо не нужен.

Ну есть и есть. От того что я будут писать:

Код: java
1.
2.
3.
4.
return dao.getList(
        User.class,
        (root, cq, cb) -> cb.equal(root.get(User_.name), "Вася")
);



вместо:

Код: java
1.
2.
3.
TypedQuery<User> query = em.createQuery("select e from User e where e.name = ?1");
query.setParameter(1, "Вася");
return query.getResultList();



Код сложнее не станет, зато станет более устойчивым к изменениям модели
...
Рейтинг: 0 / 0
Новые веяния
    #39981072
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов

зато станет более устойчивым к изменениям модели

Чем?

Андрей Панфилов
Код сложнее не станет

лукавство

1. native SQL-код можно сделать copy-past в PL/SQL девелопер и проверить
2. native SQL-код можно сделать copy-past и перенести во View или PL/SQL на стороне сервера
3. если будет глючить или будут проблемы с перформансом, SQL-код можно сделать Copy-Past и послать админу и надеятся, что админ в ответ не пошлет тебя
4. при необходимости выкинуть "убогую Java" и взять новомодный язык "смешарики 5G". скорее всего, так же, можно будет сделать copy-past и повторно его использовать
и еще 100500 сценариев из реальной жизни
...
Рейтинг: 0 / 0
Новые веяния
    #39981074
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xerxf
Последнее время делаю довольно много code review и замечаю такую вещь - пошло прямо таки какое то повальное увлечение переусложнением кода. Что это - не понимание сути и попытка впихнуть везде, где только можно свежеполученные знания или реальная необходимость, которой я никак не могу проникнуться?
Как пример:
Есть некая функция. которая что то там делает, но основная логика скрыта в вызываемой библиотечной функции. Эта библиотечная функция синхронизированна. И возвращает список. причём эта библиотечная функция в классе-синглтоне.
По логике программы эта функция должна вызываться в цикле несколько раз с разными параметрами. Программист оборачивает функцию в Future, внутри результаты работы библиотечной функции пишет в потокобезопасную коллекцию(причём над коллекцией он тоже сделал обёртку-синглтон), и все эти фьчерсы засылает в CompletableFuture.allOf. А по whenComplete выбирает данные из потокобезопасной коллекции и что то с ними делает. Вопрос - а зачем так сложно? всё равно же всё споткнётся на синхронизированном методе ( а там кроме него по сути и нет ничего) и будет выполняться фактически последовательно, без всякого парралелилизма?

По данному эмоциональному тексту очень сложно судить о том правильно там что-то реализовано или переусложнено.
Всё зависит от ситуации. Возможно ты имеешь дело с плодом рефакторинга. Или код к чему-то готовился. Или из кода
выпиливалось что-то очень крупное и ты видешь ошмётки.

Словом нет хорошего или плохого кода. Есть просто некое бесконечное состояние евро-ремонта в коде и есть
команда программистов которые либо "терпят" этот код либо заводят technical dept и переписывают его.

Идеальный код есть только в наших снах и фантазиях.

Но если ты в состоянии улучшить этот код и при этом не сломать приложение - welcome.

По топику. Не стесняйся публиковать сорцы. Как говорил один любитель пингвинов - Talk is cheep! Show me fucken code!

Разумеется вымарай все бизнесовые идентификаторы.
...
Рейтинг: 0 / 0
Новые веяния
    #39981075
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Андрей Панфилов

зато станет более устойчивым к изменениям модели

Чем?
Например перестанет компилироваться если поле убрали/переименовали.

Leonid Kudryavtsev

Андрей Панфилов
Код сложнее не станет

лукавство

1. native SQL-код можно сделать copy-past в PL/SQL девелопер и проверить
2. native SQL-код можно сделать copy-past и перенести во View или PL/SQL на стороне сервера
3. если будет глючить или будут проблемы с перформансом, SQL-код можно сделать Copy-Past и послать админу и надеятся, что админ в ответ не пошлет тебя
4. при необходимости выкинуть "убогую Java" и взять новомодный язык "смешарики 5G". скорее всего, так же, можно будет сделать copy-past и повторно его использовать
и еще 100500 сценариев из реальной жизни


Леонид, вот расскажите-ка два момента:
- в каком месте вы вообще увидели native SQL-код? разговор был про JPQL и Criteria API. JPQL - это нифига не native
- в какое место PL/SQL-девелопера вы собрались вставлять свою (еще ненаписанную) нетленку на стрингбилдерапенд?
...
Рейтинг: 0 / 0
Новые веяния
    #39981078
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xerxf

Или ещё - функция возвращает строку. Эта строка передаётся в другую функцию. Другая функция этой строке что то там ищет. Всё. Зачем первая функция строку оборачивает в Option ? Не, я всё понимаю - функциональщина, защита от null и всё такое.. Но как бы любые лишние телодижения - это лишние тормоза и каждая лишняя строчка - это потенциальный источник проблем (все мы человеки - чем больше напишешь, тем больше вероятость ошибки) зачем это всё? особенно если первая функция гарантированно возвращает не null

Optional может быть полезен когда ты процессишь Stream объектов. Мы это уже обсуждали в форуме.
Найдите сами ссылку.
...
Рейтинг: 0 / 0
Новые веяния
    #39981138
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Код сложнее не станет

читаемость имхо ниже. Может ты стопицот таких запросов написал и тебе оно кажется одинаковым, я смотрю на то и другое, и что происходит во втором случае понимаю не напрягаясь, в отличие от первого. добавь еще 3-4 джоина с условиями и дело только усугубится

Андрей Панфилов
более устойчивым к изменениям модели

так-то да, но на практике преимущество имхо минимальное. даже если отвлечься от того, что IDEA например умеет поля в jql/hql запросах рефакторить, ну как долго проживет такой баг с изменившейся моделью, до первого запуска тестов?

Leonid Kudryavtsev
"переиспользования кусков" так же не очень понятный термин, никаких проблем с клавишами Ctrl-C, Ctrl-v
ну если недостатки ctrl-c, ctrl-v неочевидны, то ок, никаких проблем нет.
...
Рейтинг: 0 / 0
Новые веяния
    #39981212
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве компилятор не упадет если модель поменял а хкл жпкл запрос забыл? По-моему все тоже попадает.
...
Рейтинг: 0 / 0
Новые веяния
    #39981213
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи
Пардон за офтоп
ребята есть ли кто живой из ЦРПТ по табачному направлению, жутко нужна консультация
зы Топик популярный

Ты ничего не перепутал?
...
Рейтинг: 0 / 0
Новые веяния
    #39981218
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Ну а че нет, на подножке проехать,
Вам же не лень, вместо того что бы пройти дальше, тут мне тыкать ))
...
Рейтинг: 0 / 0
Новые веяния
    #39981283
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
А разве компилятор не упадет если модель поменял а хкл жпкл запрос забыл?
нет конечно, это же строка. парсит ее хибер в рантайме, а не компилятор. Тоже самое касается синтаксически неправильно составленного запроса. IDEA может ругаться и рефакторинг поддерживает, но это очень тонкий лед, ни разу не замена тестам.
...
Рейтинг: 0 / 0
Новые веяния
    #39981351
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автоинкремент в качестве id уже видал?
...
Рейтинг: 0 / 0
Новые веяния
    #39981355
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
andreykaT
А разве компилятор не упадет если модель поменял а хкл жпкл запрос забыл?
нет конечно, это же строка. парсит ее хибер в рантайме, а не компилятор. Тоже самое касается синтаксически неправильно составленного запроса. IDEA может ругаться и рефакторинг поддерживает, но это очень тонкий лед, ни разу не замена тестам.

да неее.. спринг дата JPQL - точно падает если модель меняется. правда, там сами запросы внутри аннотаций. может спринг дата такой умный. забыл детали уже.
...
Рейтинг: 0 / 0
Новые веяния
    #39981356
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи
andreykaT,
Ну а че нет, на подножке проехать,
Вам же не лень, вместо того что бы пройти дальше, тут мне тыкать ))

ну я просто когда то давно имел время общения и работы с ними. поэтому и заинтересовался ))) какое они отношение имеют к топику.
...
Рейтинг: 0 / 0
Новые веяния
    #39981367
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
да неее.. спринг дата JPQL - точно падает

я не специалист по spring data, нашел специально один проектец, где он есть, попробовал

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public interface AppRepository extends JpaRepository<App, Integer> {

 // неправильное имя поля Name1
    Optional<App> findByName1(@NonNull String appName); 

// неправильное имя поля username1
    @Query("select app from App app where app not in (select permission.app from Users users join users.permissions permission where users.username1 = ?1 and permission.level < ?2)") 
    Slice<App> findAllByPermission(@NonNull String username, @NonNull Permission.Level level, @NonNull Pageable pageable);



ничего не падает. если я ничего не упускаю, то оно может падать в одном единственном случае - если есть annotation processing и генерятся классы в compile time. иначе как это падание по-твоему обеспечивается? спринг data генерит классы в compile time для repository? по-моему нет - как всегда в рантайме. Разве что он их может валидирует сразу при старте
...
Рейтинг: 0 / 0
Новые веяния
    #39981370
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P. S. ну или если через maven/gradle компилить и там какой-то плагин есть
...
Рейтинг: 0 / 0
Новые веяния
    #39981384
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
я смотрю на то и другое, и что происходит во втором случае понимаю не напрягаясь, в отличие от первого. добавь еще 3-4 джоина с условиями и дело только усугубится
Джойны - это какая-то страшилка для детей. Скажем так: если у вас в проекте JPA много "джойнов", то это звоночек, что в проекте что-то не так, потому что джойны в JPA нужны довольно редко, например в:

chpasha

Код: java
1.
2.
3.
4.
5.
public interface AppRepository extends JpaRepository<App, Integer> {

// неправильное имя поля username1
    @Query("select app from App app where app not in (select permission.app from Users users join users.permissions permission where users.username1 = ?1 and permission.level < ?2)") 
    Slice<App> findAllByPermission(@NonNull String username, @NonNull Permission.Level level, @NonNull Pageable pageable);


"join users.permissions" не нужен - нужно из Permission выбирать, а не из Users (тут еще кто-то класс зачем-то в множественном числе обозвал - нужно срочно переименовывать), а вот анти-джойн NOT IN выглядит вообще крайне подозрительно - что будет в случае если в permission.app NULL?

Андрей Панфилов
как долго проживет такой баг с изменившейся моделью, до первого запуска тестов?

Если настоящих интеграционных тестов нет, то проживет оно сколько угодно долго. Ну и в целом аргументация про наличие тестов так себе: зачем вообще писать нормальный код, если при желании можно любую хрень покрыть тестами?

chpasha
IDEA например умеет поля в jql/hql запросах рефакторить

Кстати очень "полезная" фича. У меня какая-то сборка установлена, и при правке строки похожей на JPQL я наблюдаю одно из двух поведений:
- оно либо жутко начинает тупить
- либо просто зависает
...
Рейтинг: 0 / 0
Новые веяния
    #39981387
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
"join users.permissions" не нужен - нужно из Permission выбирать, а не из Users (тут еще кто-то класс зачем-то в множественном числе обозвал - нужно срочно переименовывать), а вот анти-джойн NOT IN выглядит вообще крайне подозрительно - что будет в случае если в permission.app NULL?
ты пытаешься понять смысла запроса там, где ему быть не обязательно . конкретно этот я выдрал из какого-то бэкенда для acra, который у меня на винте валялся - просто потому что я помню, что там spring data jpa был с @Query, а не потому что там есть join.

Андрей Панфилов
Если настоящих интеграционных тестов нет, то проживет оно сколько угодно долго
[пожимает плечами], ну а если есть, то до первого запуска

Андрей Панфилов
зачем вообще писать нормальный код, если при желании можно любую хрень покрыть тестами?
что есть "нормальный" код? каков критерий? собственно с чего топик и начался. А наличие или отсутствие тестов тут вообще как бы не пришей кобыле хвост. Эта тема всплыла только потому, что ты говоришь, что использование jql это ай-ай-ай потому что нет compile-time проверок - поле таблицы удалили/переименовали и все пропало. А я считаю, что масштаб данной проблемы сильно гипертрофирован.
...
Рейтинг: 0 / 0
Новые веяния
    #39981388
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
У меня какая-то сборка установлена, и при правке строки похожей на JPQL я наблюдаю одно из двух поведений
ну, поставь какую-нибудь более другую сборку, вдруг повезет
...
Рейтинг: 0 / 0
Новые веяния
    #39981447
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xerxfЧто это - не понимание сути и попытка впихнуть везде, где только можно свежеполученные знания или реальная необходимость, которой я никак не могу проникнуться?Уважаемый xerxf,
есть возможность спросить авторов кода ?
...
Рейтинг: 0 / 0
Новые веяния
    #39981463
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
P. S. ну или если через maven/gradle компилить и там какой-то плагин есть

Да, разумеется, мавен градл. А как иначе) падает, точно падает
...
Рейтинг: 0 / 0
Новые веяния
    #39981498
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
падает, точно падает

пробовал?

andreykaT
А как иначе

реально-то такой плагин есть аль нет?
...
Рейтинг: 0 / 0
Новые веяния
    #39981499
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P. S.
короткий гуглинг говорит, что никакой compile-time валидации hql нет. посылают в criteria api.
вот какую-то самописку только нагуглил
...
Рейтинг: 0 / 0
Новые веяния
    #39981634
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
P. S.
короткий гуглинг говорит, что никакой compile-time валидации hql нет. посылают в criteria api.
вот какую-то самописку только нагуглил


IDEA в принципе справляется с валидацией hql, да SQL тоже.
...
Рейтинг: 0 / 0
Новые веяния
    #39981866
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
IDEA в принципе справляется с валидацией hql, да SQL тоже

так то да, но это ж просто инспекция, которую можно просто игнорировать и которая может слететь в каком-то обновлении, потому что фасет модуля слетел или смотрит не туда или индексы тово или х.з. еще что. короче nice to have, но не более.
...
Рейтинг: 0 / 0
Новые веяния
    #39981917
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
IDEA в принципе справляется с валидацией hql, да SQL тоже.
а она отслеживает изменения субд? и для всех субд это делается?
или только то что что хибер может?
...
Рейтинг: 0 / 0
Новые веяния
    #39982092
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mad_nazgul
IDEA в принципе справляется с валидацией hql, да SQL тоже.
а она отслеживает изменения субд? и для всех субд это делается?
или только то что что хибер может?


По идее должна.
Но там все завязано на внутренних индексах IDEA.
Если индексы соединения с БД обновились и изменения из БД подтянулись, то все ок.
В IDEA основная часть функционала работы с БД взята из DataGrip.
(Точнее DataGrip выделили в отдельную IDE для работы с БД из IDEA)

Поддерживаются почти все СУРБД, для которых есть JDBC + парочка модных NoSQL БД.
...
Рейтинг: 0 / 0
Новые веяния
    #39982093
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
mad_nazgul
IDEA в принципе справляется с валидацией hql, да SQL тоже

так то да, но это ж просто инспекция, которую можно просто игнорировать и которая может слететь в каком-то обновлении, потому что фасет модуля слетел или смотрит не туда или индексы тово или х.з. еще что. короче nice to have, но не более.


Да.
Но жизнь облегчает.
Как минимум "детские ошибки" труднее сделать.
...
Рейтинг: 0 / 0
Новые веяния
    #39982097
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,

я очень в этом сомневаюсь
судя по тому что есть отличия в mysql 8.19 и 8.20
...
Рейтинг: 0 / 0
Новые веяния
    #39982170
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
Как минимум "детские ошибки" труднее сделать.
имхо, самое полезное - это автоподсказка по именам полей и таблиц в процессе написания запроса
...
Рейтинг: 0 / 0
Новые веяния
    #39982179
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
mad_nazgul,

я очень в этом сомневаюсь
судя по тому что есть отличия в mysql 8.19 и 8.20


Ну ок. Мне в принципе хватает. :-)
...
Рейтинг: 0 / 0
Новые веяния
    #39982467
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДжойны - это какая-то страшилка для детей. Скажем так: если у вас в проекте JPA много "джойнов", то это звоночек, что в проекте что-то не так, потому что джойны в JPA нужны довольно редко
JPA затем только и нужен чтобы джойны делать легче было. Вы путаете с no sql.
...
Рейтинг: 0 / 0
Новые веяния
    #39982504
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
Лучше любые новые веяния ,чем 10 летнее говно,на котором я сейчас сижу.
Ска спек технологий
свой собственный фремворк+ китайского г0вно ZK + древний спринг
все это построено на каком то адском количестве XML
скрипты проливают тоже своим самописным инструментом

просто ад - дали задачу выпилить из модуля пару настроек
идет второй день - я не могу их найти))

сцка ну почему нельзя использовать нормальную модель данных на нормальном ОРМ где все понято - вот дто и вот таблица под него

почему чтобы изменить сцка одну графу в этом дерьме нужно перелопатить миллиарды тонн xml

я сейчас попал на проект где такое же вот десятилетнее жее с хмл и прочими кэмелами. просто дождался момента и спрыгнул на новый проект внутри компании где это всё они решили переписать на модном кварке и более "микро" сервисах :)
а так тебя ждет еще много интересного на этой стезе. надеюсь, ты зааплаился на ту работу за в четыре раза больше вместо твоих нынешних 30-ти.
...
Рейтинг: 0 / 0
Новые веяния
    #39982506
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras
авторДжойны - это какая-то страшилка для детей. Скажем так: если у вас в проекте JPA много "джойнов", то это звоночек, что в проекте что-то не так, потому что джойны в JPA нужны довольно редко

JPA затем только и нужен чтобы джойны делать легче было. Вы путаете с no sql.
я так понимаю, речь о том что джойы сами по себе не плохи но когда их овер-много то они становятся плохи и повод задуматься о твоей доменной модели. хотя, обычно к тому моменту уже поздновато :)
...
Рейтинг: 0 / 0
Новые веяния
    #39982511
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...насчет жпкл хкл версус критерии - ну короче, там вроде рекомендуют ими не злоупотреблять.
я видел запросы на критериях размером в 800 строк. с кучей всяких форов ифов и прочего навоза, динамически выстраивающего мегамонстрозапрос по концовке (да и по началу тоже). ну в этом как бы разбираться мягко говоря не очень. что-то добавлять убирать править. адок. это к вопросу о злоупотреблениях. мое личное имхо - жпкл все же понятнее и лаконичнее.
...
Рейтинг: 0 / 0
Новые веяния
    #39982708
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
dakeiras
пропущено...

JPA затем только и нужен чтобы джойны делать легче было. Вы путаете с no sql.

я так понимаю, речь о том что джойы сами по себе не плохи но когда их овер-много то они становятся плохи и повод задуматься о твоей доменной модели. хотя, обычно к тому моменту уже поздновато :)

я возможно соглашусь с Вами насчёт "овермного=поздновато", хотя оч. сильно зависит от проекта. Это далеко не общее правило.

Но товарищ пишет конкретно:

авторджойны в JPA нужны довольно редко

Чтож. Зато знает что simpledateformat потоконебезопасен.
...
Рейтинг: 0 / 0
Новые веяния
    #39982720
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну ты же не знаешь его специфику проекта может он так удачно всё выстроил что у него в проекте одна или может даже две таблицы.

я сейчас не шучу и не стебусь. но это всё зависит от конкретных задач. может он занимается сбором ро-дата, а потом дальше уже ее подгребает-разгребает-анализирует-считает. там действительно нет причин иметь много джойнов да и вообще джойнов.
...
Рейтинг: 0 / 0
Новые веяния
    #39982792
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
Лучше любые новые веяния ,чем 10 летнее говно,на котором я сейчас сижу.
Ска спек технологий
свой собственный фремворк+ китайского г0вно ZK + древний спринг
все это построено на каком то адском количестве XML
скрипты проливают тоже своим самописным инструментом

просто ад - дали задачу выпилить из модуля пару настроек
идет второй день - я не могу их найти))

сцка ну почему нельзя использовать нормальную модель данных на нормальном ОРМ где все понято - вот дто и вот таблица под него

почему чтобы изменить сцка одну графу в этом дерьме нужно перелопатить миллиарды тонн xml

Скоро станешь философом. Тогда и эмоции уйдут. Будешь тихо себе сидеть. Читать код.
Писать не будешь. Смысла нет. Пока весь прочитаешь - у тебя отрастёт седая борода.
...
Рейтинг: 0 / 0
Новые веяния
    #39982898
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeiras

Но товарищ пишет конкретно:

авторджойны в JPA нужны довольно редко


Чтож. Зато знает что simpledateformat потоконебезопасен.

O_o, тяжелая артиллерия из groovy-некрофилов подтянулась Чет мне кажется что вам не стоило ввязываться в дискуссию по JPA, ибо ваши знания не настолько глубоки как вам могло показаться.
...
Рейтинг: 0 / 0
Новые веяния
    #39982900
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha
ты пытаешься понять смысла запроса там, где ему быть не обязательно . конкретно этот я выдрал из какого-то бэкенда для acra, который у меня на винте валялся - просто потому что я помню, что там spring data jpa был с @Query, а не потому что там есть join.
Ну т.е. сначала мы говорим, что JPQL это офигеть как удобно и просто, потом показываем пару примеров и наблюдаем статистику в виде "две ошибки на одну строчку "кода"", но всегда можно сказать что примеры совершенно случайны, и у кого-кого, но у нас в проекте с этим проблем нет, потому что:
- мы пренепременно купили Intellij IDEA EE (ага, в CE поддержки JPA нет)
- покрыли все что можно интеграционными тестами
- постоянно делаем тщательное ревью нетленок на JPQL в боязни пропустить очередной креатив

Нахер, я лучше "по старинке" буду на Criteria API делать.
...
Рейтинг: 0 / 0
Новые веяния
    #39983113
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
что JPQL это офигеть как удобно

да, если человек знаком с sql, то с точки зрения понимания, что происходит, удобно

Андрей Панфилов
потом показываем пару примеров и наблюдаем статистику в виде "две ошибки на одну строчку "кода"

там нет ошибки. запрос написан не оптимально, но с учетом 3х записей в таблице это переживаемо. ты понимаешь, что аргументируешь в пользу того, что jql говно на основании одного запроса какого-то безымяного чувака с github? если б я знал, что твоя линия нападения будет вокруг смысла запроса, а не его формы, я б его уже переписал. но теперь чо уж, моя машина времени на ТО.

Андрей Панфилов
но всегда можно сказать что примеры совершенно случайны

так и есть

Андрей Панфилов
и у кого-кого, но у нас в проекте с этим проблем нет

проблемы есть у всех

Андрей Панфилов
постоянно делаем тщательное ревью нетленок на JPQL в боязни пропустить очередной креатив
sql он такой, можно быстро почесать правой рукой левое ухо. как и в чем угодно еще. с criteria такое конечно не случается, там сразу генерится такой запрос, что оптимизатор аж заурчит от такого кошерного плана.

Андрей Панфилов
Нахер, я лучше "по старинке" буду на Criteria API делать.

я разве против ¯\_(ツ)_/¯
...
Рейтинг: 0 / 0
Новые веяния
    #39983307
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Zzz79
Лучше любые новые веяния ,чем 10 летнее говно,на котором я сейчас сижу.
Ска спек технологий
свой собственный фремворк+ китайского г0вно ZK + древний спринг
все это построено на каком то адском количестве XML
скрипты проливают тоже своим самописным инструментом

просто ад - дали задачу выпилить из модуля пару настроек
идет второй день - я не могу их найти))

сцка ну почему нельзя использовать нормальную модель данных на нормальном ОРМ где все понято - вот дто и вот таблица под него

почему чтобы изменить сцка одну графу в этом дерьме нужно перелопатить миллиарды тонн xml

Скоро станешь философом. Тогда и эмоции уйдут. Будешь тихо себе сидеть. Читать код.
Писать не будешь. Смысла нет. Пока весь прочитаешь - у тебя отрастёт седая борода.

я бы рад ,но за читку кода денег не платят,хотя вот то на чем я сейчас - там надо давать водку литрами за вредность- ибо хочется рыдать и плакать и из глаз течет кровь

ну как вот с**а в 2020 году изменение в одном классе тянет за собой изменение еще в 20
и ладно бы это была джава - там бы найти не составляло труда
но это xml
и вот ты раз за разом передеплоиваешь проект и пытаешься найти куда идти - ведь это даже не дебажится

пс. Все в книгах то здорово пишут - но на практике какая то жопа - я не видел классов которые Single responsibility)
их с**а нет нигде вообще
ни на газпроме ,ни в сбере,ни вот тут где я щас сижу
зачем вот это все - если код пишется уибанами ,которые не осилили чистый код
...
Рейтинг: 0 / 0
Новые веяния
    #39983349
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тебя умоляю. Разработка - это как Евро-ремонт. Его никогда нельзя закончить. Можно только резко прекратить.
Для этого и есть спринты, эстимации и деливери менеджеры.

А если ты хочешь вылизывать код как кошак свои бубенцы - то тогда до релиза никто не доживет. Тем более
что требования будут меняться на ходу.
...
Рейтинг: 0 / 0
79 сообщений из 79, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Новые веяния
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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