Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Repository в Hibernate 5 / 25 сообщений из 56, страница 1 из 3
13.05.2018, 21:46
    #39644005
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Начинаю разбираться с 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
13.05.2018, 21:57
    #39644008
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Tsyklop,
забудь эту прокладку как страшный сон...
и будет тебе счастье
...
Рейтинг: 0 / 0
13.05.2018, 22:02
    #39644011
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
вадяTsyklop,
забудь эту прокладку как страшный сон...
и будет тебе счастье
пожалуй - нет. Смысл Вашего комментария тут? Он не несет ничего полезного.
...
Рейтинг: 0 / 0
13.05.2018, 22:20
    #39644016
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
вопрос не имеет никакого отношения к Hibernate и работе с БД, это чисто архитектурный момент. Причем в данном примере естественно в сервисе нет никакого смысла, но он мог бы появиться - если бы сервис какую-то полезную работу выполнял. Ну например - если бы при сохранении пользователя нужно было какие-то записи вносить в историю, или банально е-мейл/sms/сообщение администратору отправлять - согласись, что отправлению емейла нечего делать в репозитарии, значит он должен находится уровнем выше - в слое бизнес-логики. И тут нам уже внезапно может пригодится наш Service.
...
Рейтинг: 0 / 0
13.05.2018, 22:27
    #39644019
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
chpashaвопрос не имеет никакого отношения к Hibernate и работе с БД, это чисто архитектурный момент. Причем в данном примере естественно в сервисе нет никакого смысла, но он мог бы появиться - если бы сервис какую-то полезную работу выполнял. Ну например - если бы при сохранении пользователя нужно было какие-то записи вносить в историю, или банально е-мейл/sms/сообщение администратору отправлять - согласись, что отправлению емейла нечего делать в репозитарии, значит он должен находится уровнем выше - в слое бизнес-логики. И тут нам уже внезапно может пригодится наш Service.

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

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

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

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

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

что на данный момент и делаю. Сейчас я работаю с чистым JDBC. НО!. сейчас все работодатели поголовно помешались на Spring и Hibernate и все его требуют. Да и не то что работодатели, просто проще писать становится бд и прочее. Но приходится жертвовать ресурсами.
...
Рейтинг: 0 / 0
13.05.2018, 22:54
    #39644036
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
вадя,
это для тебя сложно?
Код: 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
13.05.2018, 22:56
    #39644039
Tsyklop
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Petro123вот тут есть пример без репозитария:
18407424
пробуйте.

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

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

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

Спасибо.
...
Рейтинг: 0 / 0
13.05.2018, 23:16
    #39644057
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Tsyklop,
под рукой нету. Мне без спринга нравится.
Те кто любят спринг подскажут.
...
Рейтинг: 0 / 0
14.05.2018, 02:30
    #39644092
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
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
14.05.2018, 02:44
    #39644093
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Petro123,
ты привел минимальный пример, а делаешь вывод о всех случаях. если взять к примеру резульсет , который возвращает пару сотен строк. можно сразу пройтись по нему и обработать. но прокладка сначала запишет всё в объект, и только потом даст с ним работать. память + время...
и селект написанный руками может вернуть данные для которых уже не требуется доп обработки на java. опять время ...
...
Рейтинг: 0 / 0
14.05.2018, 06:13
    #39644102
Cheblin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Tsyklopчто на данный момент и делаю. Сейчас я работаю с чистым JDBC. НО!. сейчас все работодатели поголовно помешались на Spring и Hibernate и все его требуют. Да и не то что работодатели, просто проще писать становится бд и прочее. Но приходится жертвовать ресурсами.
https://www.jooq.org/] jOOQ: The easiest way to write SQL in Java
а работодатели.... либо не в курсе, и тогда пусть "окультуриваются", либо идут лесом...
...
Рейтинг: 0 / 0
14.05.2018, 07:19
    #39644117
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
вадя,
Ты против ООП? Тогда иди лесом.
...
Рейтинг: 0 / 0
14.05.2018, 07:22
    #39644118
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Tsyklop,
Если тут не появится короткого примера на спринге, делай на Hiber API.
Удачи!
...
Рейтинг: 0 / 0
14.05.2018, 08:02
    #39644126
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Repository в Hibernate 5
Tsyklop,

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


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