Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Generic в JPA Repository / 13 сообщений из 13, страница 1 из 1
05.07.2021, 23:36
    #40081978
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
Есть таблица Parent & 3 Child таблицы, которые наследуются от Parent

Я хочу работать с таблицами в зависимости от того какой репозиторий создан

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Service
@RequiredArgsConstructor
@Slf4j
public class TableService<E extends Parent> {
private final TableRepository<E> tableRepository;
}

@Repository (или NoRepositoryBean)
public interface TableRepository<E extends Parent>{
}



Проблема в том, что как не создал сервис
TableService<Parent>
TableService<Child1>

Репозиторий всегда работает с таблицей Parent

Я нашел пару вопросов на данную тему
https://stackoverflow.com/questions/35059570/spring-jparepository-using-generic-entity

То есть репозитории создается на старте

МОжно ли обыграть данную ситуацию, чтоб работать только с одним сервисом TableService?
...
Рейтинг: 0 / 0
06.07.2021, 07:17
    #40081989
Generic в JPA Repository
Проблема в том что в сервис инжектится не тот repository? Тогда избавься от autowiring'a/PackageScan'a и указывай явно какой репозиторий инжектить.

Ну либо как советуют на SO - создавай явно интерфейсы/классы типа Child1Repo, Child2Repo, etc. Но тогда 1 сервис не сможет работать с разными репозиториями (если в этом есть необходимость).

А вообще необычная архитектура получается. Выглядит как будто ты хочешь какой-то слишком универсальный код написать. Чтоб, как правило, либо очень сложно/запутанно, либо бесполезно. Тебе это точно надо и по-другому никак?
...
Рейтинг: 0 / 0
06.07.2021, 08:42
    #40081998
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
Stanislav Bashkyrtsev
Проблема в том что в сервис инжектится не тот repository? Тогда избавься от autowiring'a/PackageScan'a и указывай явно какой репозиторий инжектить.

Ну либо как советуют на SO - создавай явно интерфейсы/классы типа Child1Repo, Child2Repo, etc. Но тогда 1 сервис не сможет работать с разными репозиториями (если в этом есть необходимость).

А вообще необычная архитектура получается. Выглядит как будто ты хочешь какой-то слишком универсальный код написать. Чтоб, как правило, либо очень сложно/запутанно, либо бесполезно. Тебе это точно надо и по-другому никак?


Да по сути все очень просто надо Entity в Dto сконвертировать

Как работа идет Сервис -> Репозитории -> Ентити -> Дто
Я и подумал, что можно Сервис и Репозитори универсальными сделать (таблицы наследуются от одной)

А для конвертации функциональный интерфейс пробрасывать
...
Рейтинг: 0 / 0
06.07.2021, 10:20
    #40082020
Generic в JPA Repository
У тебя бек - это просто данные достать и в JSON сконвертировать? Тогда можно хоть с репозитория сразу DTO возвращать, и сервис не нужен будет.
...
Рейтинг: 0 / 0
06.07.2021, 10:47
    #40082028
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
Stanislav Bashkyrtsev
У тебя бек - это просто данные достать и в JSON сконвертировать? Тогда можно хоть с репозитория сразу DTO возвращать, и сервис не нужен будет.

Ну не совсем скажем примитивный CRUD с небольшой логикой


И пилить 4 сервиса и 4 репозитория ну это копипаст
Все основные поля заполняются в Parent

А дополнителньые уже в Child1-3

Получается
Что вся логика заполнения основных полей у меня дублируется 4 раз


Я думал уже при сохранения Child кастовать ее к Parent
Далее, сохраненную ParentEnity копировать в ChildEnity, заполнять оставшиеся поля и сохранять уже... Но тут лишние запросы будут
...
Рейтинг: 0 / 0
06.07.2021, 11:03
    #40082029
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
-=Koba=-,
Покажи реальный копипаст.
...
Рейтинг: 0 / 0
06.07.2021, 11:16
    #40082031
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
-=Koba=-,
>скажем примитивный CRUD с небольшой логикой
Хмммм..
Не подходят готовые
Repository
CrudRepository
PagingAndStoringRepository
JpaRepository
?
...
Рейтинг: 0 / 0
06.07.2021, 11:29
    #40082034
Generic в JPA Repository
авторЧто вся логика заполнения основных полей у меня дублируется 4 разЗаполнение полей в DTO?
...
Рейтинг: 0 / 0
06.07.2021, 11:37
    #40082036
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
PetroNotC Sharp
-=Koba=-,
>скажем примитивный CRUD с небольшой логикой
Хмммм..
Не подходят готовые
Repository
CrudRepository
PagingAndStoringRepository
JpaRepository
?



TableService
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public <T extends ParentDto> T saveCaseDocWithAttachment(@NonNull final Long caseId,
                                                              @NonNull final T dto,
                                                              final MultipartFile[] attachment,
                                                              @NonNull final Function<ParentEntity, T> mapper)
            throws IOException, NoSuchAlgorithmException {
        ParentEntity parentEntity = saveCaseDocEntity(caseId, dto);
        if (attachment != null) {
            for (MultipartFile attachmentFile : attachment) {
                docEntity = saveCaseDocAttachment(dto, attachmentFile, parentEntity);
            }
        }
        return mapper.apply(docEntity);
    }

]]

ParentDto от него наследуется ChildDto
ParentEntity от него наследуется ChildEntity

saveCaseDocEntity тут идет сохранение только в репозитори ParentRepository
А было удобнее если б я могу упарвлять репозиторием в какой сохранять

Когда работаю с Parent то
ParentEntity parentEntity = saveCaseDocEntity(caseId, dto);

А если Child то
ChildEntity childEntity = saveCaseDocEntity(caseId, dto);

Поэтому и пытался перевести репозитории на Generic
...
Рейтинг: 0 / 0
06.07.2021, 12:31
    #40082056
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
-=Koba=-,
Покажи дублирование без наследования.
Модель в субд не очень дружит с наследованием. Там нет ООП
...
Рейтинг: 0 / 0
06.07.2021, 12:35
    #40082060
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
Кроме того сам паттерн репо это не наследование. Это жесткий контракт.
...
Рейтинг: 0 / 0
06.07.2021, 12:50
    #40082069
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
-=Koba=-,
Мое имхо что ты как программист перемудрил и решил добавить наследование.

>ParentDto от него наследуется ChildDto ParentEntity от него наследуется ChildEntity
= а полагается сущности называть БИЗНЕС именами. А не множить программисткими терминами items, parent и т.д.
...
Рейтинг: 0 / 0
06.07.2021, 15:38
    #40082143
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generic в JPA Repository
-=Koba=-
МОжно ли обыграть данную ситуацию, чтоб работать только с одним сервисом TableService?


Можно написать один класс TableService.
А потом в @Configure создать под каждую сущность бин.

<:o)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Generic в JPA Repository / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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