powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Repository в Hibernate 5
25 сообщений из 56, страница 1 из 3
Repository в Hibernate 5
    #39644005
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начинаю разбираться с Hibernate 5 и не понятна суть работы с бд.

Взял пример в интернете - код ниже.

Не могу одного понять. Смысл создавать service если он попросту дублирует repository по сути.
Подскажите как правильно такое реализовывать. Вообще реализовывать DAO. Что касается Entity мне более менее понятно, как описывать и т.д. но вот сам этот процесс не очень.

Хочется научится правильно делать.

Спасибо.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public interface UserRepository {
    UserEntity save(UserEntity car);
    void update(UserEntity user);
    List<UserEntity> getAll();
    List<UserEntity> getAllByFirstName(String firstName);
    List<UserEntity> getAllByLastName(String lastName);
    List<UserEntity> getAllByGender(String gender);
    UserEntity getById(Long id);
    void remove(Long id);
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
@Repository
@Transactional()
public class UserRepositoryImpl  implements UserRepository {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    @Transactional
    public UserEntity save(UserEntity user) {
        if(user.getId() != null){
            return entityManager.merge(user);
        } else {
            entityManager.persist(user);
            return user;
        }
    }

    @Override
    public void update(UserEntity user) {

    }

    @Override
    public List<UserEntity> getAll() {
        CriteriaQuery<UserEntity> criteria = entityManager.getCriteriaBuilder().createQuery(UserEntity.class);
        criteria.select(criteria.from(UserEntity.class));
        return entityManager.createQuery(criteria).getResultList();
    }

    @Override
    public List<UserEntity> getAllByFirstName(String firstName) {
         ...
    }

    @Override
    public List<UserEntity> getAllByLastName(String lastName) {
         ...
    }

    @Override
    public List<UserEntity> getAllByGender(String gender) {
         ...
    }

    @Override
    public UserEntity getById(Long id) {
        return entityManager.find(UserEntity.class, id);
    }

    @Override
    public void remove(Long id) {
        UserEntity user = getById(id);
        if(user != null) {
            entityManager.remove(user);
        }
    }
}



Код: java
1.
2.
3.
4.
5.
6.
public interface UserService {
    UserEntity save(UserEntity userEntityy);
    List<UserEntity> getAll();
    UserEntity getById(long id);
    void remove(long id);
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserRepository userRepository;

    @Override
    public UserEntity save(UserEntity userEntityy) {
        return userRepository.save(userEntityy);
    }

    @Override
    public List<UserEntity> getAll() {
        return userRepository.getAll();
    }

    @Override
    public UserEntity getById(long id) {
        return userRepository.getById(id);
    }

    @Override
    public void remove(long id) {
        userRepository.remove(id);

    }
}
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644008
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
забудь эту прокладку как страшный сон...
и будет тебе счастье
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644011
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяTsyklop,
забудь эту прокладку как страшный сон...
и будет тебе счастье
пожалуй - нет. Смысл Вашего комментария тут? Он не несет ничего полезного.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644016
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос не имеет никакого отношения к Hibernate и работе с БД, это чисто архитектурный момент. Причем в данном примере естественно в сервисе нет никакого смысла, но он мог бы появиться - если бы сервис какую-то полезную работу выполнял. Ну например - если бы при сохранении пользователя нужно было какие-то записи вносить в историю, или банально е-мейл/sms/сообщение администратору отправлять - согласись, что отправлению емейла нечего делать в репозитарии, значит он должен находится уровнем выше - в слое бизнес-логики. И тут нам уже внезапно может пригодится наш Service.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644019
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaвопрос не имеет никакого отношения к Hibernate и работе с БД, это чисто архитектурный момент. Причем в данном примере естественно в сервисе нет никакого смысла, но он мог бы появиться - если бы сервис какую-то полезную работу выполнял. Ну например - если бы при сохранении пользователя нужно было какие-то записи вносить в историю, или банально е-мейл/sms/сообщение администратору отправлять - согласись, что отправлению емейла нечего делать в репозитарии, значит он должен находится уровнем выше - в слое бизнес-логики. И тут нам уже внезапно может пригодится наш Service.

окей. как мне правильно построить работу с бд? Создать базовый репозиторий с простыми действиями - select, insert, update, remove и создать репозиторий который будет наследоваться от базового и при этом относится к определенной сущности.К примеру есть UserEntity. Есть некий базовый репозиторий DaoRepository и UserRepository который описывает работу непосредственно с UserEntity.

Так правильно?
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644028
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopК примеру есть UserEntity
покажите как сейчас в хибере вы работаете с сущностью.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644030
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123TsyklopК примеру есть UserEntity
покажите как сейчас в хибере вы работаете с сущностью.
Пока никак не работаю. Хотел написать своё. То что я привел я взял с интернета.

Все что написал я это саму энтити и интерфейс который описывает методы для работы с энтити.
Но при этом сервак не запустился ибо у меня нет реализации. Тут то и стал вопрос как правильно делать.

Мне один человек подсказал такой принцип - https://pastebin.com/ymM0yhgB. Думаю тут не сильно замудрено. Так нормально?
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644032
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopвадяTsyklop,
забудь эту прокладку как страшный сон...
и будет тебе счастье
пожалуй - нет. Смысл Вашего комментария тут? Он не несет ничего полезного.
полезное будет если сможешь без этой прклади работать с базой. и сможешь делать намного больше, и будет работать намного быстрее.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644034
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopПока никак не работаю.
ну, невозможно рассуждать о делениях на слои большого приложения уровня предприятия , если ничего не вообще не писал.
авторСоздать базовый репозиторий с простыми действиями - select, insert, update, remove
вот тут есть пример без репозитария:
18407424
пробуйте.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644035
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяTsyklopпропущено...

пожалуй - нет. Смысл Вашего комментария тут? Он не несет ничего полезного.
полезное будет если сможешь без этой прклади работать с базой. и сможешь делать намного больше, и будет работать намного быстрее.

что на данный момент и делаю. Сейчас я работаю с чистым JDBC. НО!. сейчас все работодатели поголовно помешались на Spring и Hibernate и все его требуют. Да и не то что работодатели, просто проще писать становится бд и прочее. Но приходится жертвовать ресурсами.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644036
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
это для тебя сложно?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
try {
			System.out.println("Создать класс-запись в БД");
			Main u = new Main();
			u.setPassword("abc123");
			session.saveOrUpdate(u);
			System.out.println("Сохранили в БД класс без коммита");
		} finally {
			HibernateUtil.commitTransaction();
			System.out.println("Коммит прошёл. Всё");
		}

...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644039
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123вот тут есть пример без репозитария:
18407424
пробуйте.

Хм. инетересно. Тут берется сразу сессия. Подскажите пожалуйста данная сессия будет новая на каждый поток, то бишь на каждый запрос или же одна на все приложение?.

И еще. У меня нет нигде явного создания это сессии. Я так понимаю что это делает Spring или же сам Hibernate
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644041
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopПодскажите пожалуйста данная сессия будет новая на каждый поток, то бишь на каждый запрос
как захочешь.
В вебе рекомендуется на запрос - 0,1 сек и закрываем.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644042
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopSpring или же сам Hibernate
есть развилка.
Либо спринг JPA либо хибер API.
Я предпочитаю второе.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644045
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123как захочешь.
В вебе рекомендуется на запрос - 0,1 сек и закрываем.
Просто ж я её не управляю. Я говорю Спрингу (наверно ему) что положи мне в рест контроллер объект для работы с определенной сущностью, он и кладет. Все.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644048
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopЯ говорю Спрингу (наверно ему) что положи мне в рест контроллер объект для работы с определенной сущностью, он и кладет.
ну значит ты выбрал спринг магию и замечательно.)))
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644049
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
делай пример как у меня но на спринге с EntityManager.
Он вместо репозитария))
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644053
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Tsyklop,
делай пример как у меня но на спринге с EntityManager.
Он вместо репозитария))

Если не сложно можно примерчик. небольшой может.

Спасибо.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644057
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
под рукой нету. Мне без спринга нравится.
Те кто любят спринг подскажут.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644092
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадя,
это для тебя сложно?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
try {
			System.out.println("Создать класс-запись в БД");
			Main u = new Main();
			u.setPassword("abc123");
			session.saveOrUpdate(u);
			System.out.println("Сохранили в БД класс без коммита");
		} finally {
			HibernateUtil.commitTransaction();
			System.out.println("Коммит прошёл. Всё");
		}


дело не в сложности, а бессмысленности данного.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644093
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
ты привел минимальный пример, а делаешь вывод о всех случаях. если взять к примеру резульсет , который возвращает пару сотен строк. можно сразу пройтись по нему и обработать. но прокладка сначала запишет всё в объект, и только потом даст с ним работать. память + время...
и селект написанный руками может вернуть данные для которых уже не требуется доп обработки на java. опять время ...
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644102
Cheblin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tsyklopчто на данный момент и делаю. Сейчас я работаю с чистым JDBC. НО!. сейчас все работодатели поголовно помешались на Spring и Hibernate и все его требуют. Да и не то что работодатели, просто проще писать становится бд и прочее. Но приходится жертвовать ресурсами.
https://www.jooq.org/] jOOQ: The easiest way to write SQL in Java
а работодатели.... либо не в курсе, и тогда пусть "окультуриваются", либо идут лесом...
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644117
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Ты против ООП? Тогда иди лесом.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644118
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
Если тут не появится короткого примера на спринге, делай на Hiber API.
Удачи!
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644126
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,

Смотрите Фаулера Repository инкапсулирует запросы. Service aka Transaction Script инкапсулирует сценарии бизнес-логики.
...
Рейтинг: 0 / 0
25 сообщений из 56, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Repository в Hibernate 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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