Size: a a a

2020 July 07

РХ

Ринат Харисов... in learn.java
Mari Rybina
Добрый день, подскажите пожалуйста по такому вопросу. Имеются 3 сущности: пользователь, подразделение, организация. Пользователь привязан к подразделению, подразделение к организации. Необходимо получать пользователей в разрезе организаций и наоборот - организации в разрезе пользователей. Как лучше поступить? Оставить все как есть и вытаскивать пользователей с организациями через прокладку в виде подразделения или создать ещё одну связь пользователь-организация напрямую и вытаскивать через неё? Что критичнее для производительности и памяти? На стеке java, spring, hibernate. Спасибо.
Можете завести проекции и вытаскивать из бд только то что нужно. Со спринг дата это проще простого
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections
источник

Э

Эд in learn.java
говорят, spring data jpa только как мок реальных репозиториев с нативными query можно юзать вначале
источник

LS

L S in learn.java
Mari Rybina
Добрый день, подскажите пожалуйста по такому вопросу. Имеются 3 сущности: пользователь, подразделение, организация. Пользователь привязан к подразделению, подразделение к организации. Необходимо получать пользователей в разрезе организаций и наоборот - организации в разрезе пользователей. Как лучше поступить? Оставить все как есть и вытаскивать пользователей с организациями через прокладку в виде подразделения или создать ещё одну связь пользователь-организация напрямую и вытаскивать через неё? Что критичнее для производительности и памяти? На стеке java, spring, hibernate. Спасибо.
Второй вариант создаёт предпосылку того, что ваши данные будут неконсисиентны во-первых, а во-вторых, вы создадите транзитивную зависимость юзер -> отделение -> организация, то есть вы хотите нарушить третью нормальную форму
источник

A

Anton in learn.java
Mari Rybina
Добрый день, подскажите пожалуйста по такому вопросу. Имеются 3 сущности: пользователь, подразделение, организация. Пользователь привязан к подразделению, подразделение к организации. Необходимо получать пользователей в разрезе организаций и наоборот - организации в разрезе пользователей. Как лучше поступить? Оставить все как есть и вытаскивать пользователей с организациями через прокладку в виде подразделения или создать ещё одну связь пользователь-организация напрямую и вытаскивать через неё? Что критичнее для производительности и памяти? На стеке java, spring, hibernate. Спасибо.
SQL, без прокладок и hibernate)
источник

MR

Mari Rybina in learn.java
Anton
SQL, без прокладок и hibernate)
А чем sql может помочь? Тут вроде джоин через подразделение. Не хотелось бы получать лишних объектов когда нужны только организации и пользователи
источник

Э

Эд in learn.java
Mari Rybina
А чем sql может помочь? Тут вроде джоин через подразделение. Не хотелось бы получать лишних объектов когда нужны только организации и пользователи
Всм? Вы можете sql вытащить необходимый resultSet ну или что там через Spring jdbc, никаких лишних объектов
источник

A

Anton in learn.java
Mari Rybina
А чем sql может помочь? Тут вроде джоин через подразделение. Не хотелось бы получать лишних объектов когда нужны только организации и пользователи
Так и выберите только их в нужную модель DTO для отображения, оставив связку по подразделению только в модели уровня бд и sql, а на уровне модели DTO добавив прямую связь пользователь - организация.
Или проекции посмотрите, как выше советовали.

Это не избавит от лишних join в БД, но прежде чем оптимизировать структуру, можно подумать кэше.
Для поиска можно закешировать мапы с iuser-iorg и iorg-iuser  по id, или полные обьекты.  Либо сделать кеширование  методами @Cashable с ehcaсhe, либо закинуть в ElasticSearch как то так. Придется инвалидировать кэш при изменениях изнутри приложения, при сторонних изменениях в БД кэш разойдется - это потребует отдельного решения инвалидами кеша.
источник

MR

Mari Rybina in learn.java
Anton
Так и выберите только их в нужную модель DTO для отображения, оставив связку по подразделению только в модели уровня бд и sql, а на уровне модели DTO добавив прямую связь пользователь - организация.
Или проекции посмотрите, как выше советовали.

Это не избавит от лишних join в БД, но прежде чем оптимизировать структуру, можно подумать кэше.
Для поиска можно закешировать мапы с iuser-iorg и iorg-iuser  по id, или полные обьекты.  Либо сделать кеширование  методами @Cashable с ehcaсhe, либо закинуть в ElasticSearch как то так. Придется инвалидировать кэш при изменениях изнутри приложения, при сторонних изменениях в БД кэш разойдется - это потребует отдельного решения инвалидами кеша.
Большое спасибо. По поводу прямой связи пользователь - организация на уровне dto, не подскажете как такое сделать? Может есть пример какой то?
источник

R

Retriv in learn.java
Здравствуйте
источник

A

Anton in learn.java
Mari Rybina
Большое спасибо. По поводу прямой связи пользователь - организация на уровне dto, не подскажете как такое сделать? Может есть пример какой то?
Внутри Spring Data JPA есть несколько способов:

Entities or DTOs – When should you use which projection?

The best way to map a projection query to a DTO (Data Transfer Object) with JPA and Hibernate

В Spring JDBC Template или Spring Data JDBC немного по другому по сравнению с Spring Data JPA более легковесные подходы, но и ручной работы может быть больше, особенно на запись. Тут можно сравнить подходы:
Spring JDBC vs Spring Data JDBC vs Spring Data JPA
источник

MR

Muzaffar Rasulov in learn.java
почему никто не говорит про майБатис?
источник

D

Dima in learn.java
Muzaffar Rasulov
почему никто не говорит про майБатис?
потому что у него маппинг в xml, а с помощью аннотаций многие вещи не сделать
источник

D

Dima in learn.java
плюс если не берут ORM, то используют pure sql или что-то вроде jooq
источник

A

Anton in learn.java
Muzaffar Rasulov
почему никто не говорит про майБатис?
Наверное потому, что его не навязывают туториалы для начинающих в комплекте со Spring Data.
И проблемы там специфические - шаблонизация sql в файлах отделенных от пакетов логики DAO на любителя, как и возможность менять sql в рантайме.
источник

--

- - in learn.java
Подскажите, пожалуйста. В GUI у JLabel со счетчиком цветов и JLabel со счетчиком топлива текст должен меняться динамично, в зависимости от того, какая переменная вычислена в loop'ах двух других классов, как заставить текст в этих JLabel меняться после нажатия кнопок ("Собрать цветы" , "Экстрактить топливо")? В моем коде текст у JLabel один раз устанавливается и больше не меняется.
источник

А

Антон in learn.java
Всем привет!
Мне нужно найти обратную операцию от 12 * 6015 % 26 = 4. то есть мне нужно получить 12. Я пока что без понятия как это сделать. Разве что перебирать как то возможные варианты в цикле
источник

.

... in learn.java
А почему 12 * 6015%26 =  4?
источник

А

Антон in learn.java
В смысле зачем мне нужно это сделать?)
источник

.

... in learn.java
Там ж остаток  9 и умножается на 12
источник

А

Антон in learn.java
не понял(
источник