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

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

Без какой прокладки? без сервисов?
Транзакции коллбеках UI делать?
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644162
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тоже на досуге в спринге ковыряюсь, и как понял разница в том, что сервис - это более высокий уровень абстракции над СУБД.

image
Код: java
1.
2.
3.
public interface ImageRepository extends JpaRepository<Image, Long> {

}



product
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public interface ProductRepository extends JpaRepository<Product, Long> {

    List<Product> findAllByName(String name);

    @Query("SELECT p FROM Product p " +
            "LEFT JOIN FETCH p.categories " +
            "LEFT JOIN FETCH p.brand " +
            "LEFT JOIN FETCH p.images " +
            "LEFT JOIN FETCH p.tags " +
            "LEFT JOIN FETCH p.relations " +
            "LEFT JOIN FETCH p.mainImage " +
            "WHERE p.id = (:id)")
    Optional<Product> findByIdAndFetchAllEagerly(@Param("id") 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.
@Service
public class ProductService {

    private final ProductRepository productRepository;
    private final ImageRepository imageRepository;

    public ProductService(ProductRepository productRepository, ImageRepository imageRepository) {
        this.productRepository = productRepository;
        this.imageRepository = imageRepository;
    }

    @Transactional
    public Product deleteImage(Long productId, Long imageId) {

        final Product product = productRepository
                .findByIdAndFetchAllEagerly(productId)
                .orElseThrow(() -> new EntityNotFoundException("Product with id = " + productId + " not found"));

        final Image image = imageRepository
                .findById(imageId)
                .orElseThrow(() -> new EntityNotFoundException("Image with id = " + imageId + " not found"));

        product.getImages().remove(image);

        // unlink main image
        if (product.getMainImage() != null && product.getMainImage().equals(image)) {
            product.setMainImage(null);
        }

        productRepository.save(product);
        imageRepository.delete(image);

        return product;
    }

}




Но меня все мучает один вопрос: чем лучше оперировать между методами проекта, ключами сущностей или самими сущностями?
Сначала пытался второе (передавать сущности), но они все равно детачатся от сессии и их приходится "перезагружать" и начинаю приходить к мнению, что смысла их держать в памяти нет.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644163
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CheblinTsyklopчто на данный момент и делаю. Сейчас я работаю с чистым JDBC. НО!. сейчас все работодатели поголовно помешались на Spring и Hibernate и все его требуют. Да и не то что работодатели, просто проще писать становится бд и прочее. Но приходится жертвовать ресурсами.
https://www.jooq.org/] jOOQ: The easiest way to write SQL in Java
а работодатели.... либо не в курсе, и тогда пусть "окультуриваются", либо идут лесом...
в моей стране популярен спринг и хибер.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644165
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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("Коммит прошёл. Всё");
		}



Зачем commit помещать в секцию finally ?
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644166
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopCheblinпропущено...

https://www.jooq.org/] jOOQ: The easiest way to write SQL in Java
а работодатели.... либо не в курсе, и тогда пусть "окультуриваются", либо идут лесом...
в моей стране популярен спринг и хибер.

Наверное это для тех, кто хибер не осилил.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644170
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,
Это ниже вроде ОРМ сам умеет. Чем sql руками писать.
Давайте обсуждать базовые возможности.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public interface ProductRepository extends JpaRepository<Product, Long> {

    List<Product> findAllByName(String name);

    @Query("SELECT p FROM Product p " +
            "LEFT JOIN FETCH p.categories " +
            "LEFT JOIN FETCH p.brand " +
            "LEFT JOIN FETCH p.images " +
            "LEFT JOIN FETCH p.tags " +
            "LEFT JOIN FETCH p.relations " +
            "LEFT JOIN FETCH p.mainImage " +
            "WHERE p.id = (:id)")
    Optional<Product> findByIdAndFetchAllEagerly(@Param("id") Long id);
}
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644174
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettЗачем commit помещать в секцию finally ?да. Ты прав конечно.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644181
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Hett,
Это ниже вроде ОРМ сам умеет. Чем sql руками писать.
Давайте обсуждать базовые возможности.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public interface ProductRepository extends JpaRepository<Product, Long> {

    List<Product> findAllByName(String name);

    @Query("SELECT p FROM Product p " +
            "LEFT JOIN FETCH p.categories " +
            "LEFT JOIN FETCH p.brand " +
            "LEFT JOIN FETCH p.images " +
            "LEFT JOIN FETCH p.tags " +
            "LEFT JOIN FETCH p.relations " +
            "LEFT JOIN FETCH p.mainImage " +
            "WHERE p.id = (:id)")
    Optional<Product> findByIdAndFetchAllEagerly(@Param("id") Long id);
}



Так это и не SQL, а HQL и его разбирает как раз ORM.
Я сходил в интернет и посмотрел там, как это сделать. На сколько помню вариантов всего два: представленный выше и через NamedEntityGraph. Второе мне показалось избыточным в моем случае, пока и так сойдет.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644182
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettно они все равно детачатся от сессии исессии короткие и не отсоединяй.
Нужен пример.
В примере выше удаляй картинку по маппингу и каскаду.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644183
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettНа сколько помню вариантов всего два:Criteria?
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644186
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Hettно они все равно детачатся от сессии исессии короткие и не отсоединяй.
Нужен пример.
В примере выше удаляй картинку по маппингу и каскаду.

Под рукой кода нет.
Делаю админку в вадине, открываю выбранный в гриде entity для редактирования попапе:
1. По клику на row в гриде сохраняю selectedEntity в свойстве одной из вьюх
2. По нажатию кнопки создает другой лейаут, в который передается этот selectedEntity.
Как понимаю передаю его неявно через сессию.

С одной стороны не нужно делать лишний запрос, так как когда открываешь "попап", то все данные для его рендеринга уже есть. Но когда нужно сохранить entity - его все равно приходится перезагрузить, чтобы приаттачить к базе и как то мне это не нравится.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644188
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123HettНа сколько помню вариантов всего два:Criteria?
В спринге репозитории на базе интерфейсов делаются. Хотя подозреваю, что можно и классом это сделать, пока не знаю как лучше. Во всяком случае через графы, как мне кажется, будет удобнее.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644190
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettприаттачить к базе
*к сессии
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644192
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettДелаю админку в вадине,ну, там всё другое.
Это же вадин).
А в классике передают параметром не id а объект. Потом через dto типа json на клиента.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644195
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettВ спринге репозитории на базе интерфейсов делаются
До сих пор спорный вопрос в вебе.
Кто то говорит что и менеджер сам является репозиторием.
Если брать шарп, то там внутри EF тоже репозиторий и городить его не нужно.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644200
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,
Что в вашем случае делает Service и Repository? подскажите пожалуйста. ибо не понимаю зачем их оба.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644204
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopHett,
Что в вашем случае делает Service и Repository? подскажите пожалуйста. ибо не понимаю зачем их оба.
Imho
Без сервисного слоя никак, а репо я бы заменил тем кто сохраняет сущности.
И плевать что принято интерфейсами что то там.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644206
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopHett,
Что в вашем случае делает Service и Repository? подскажите пожалуйста. ибо не понимаю зачем их оба.

Репозиторий предоставляет интерфейс для управления конкретной сущностью.
Сервис находится на уровне выше и управляет сущностями используя репозитории. При этом он может оперировать сразу несколькими типами сущностей (как в моем примере, удаляя картинку мы ее отвязываем от продукта).
Но это мое видение, не знаю на сколько корректное.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644210
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123TsyklopHett,
Что в вашем случае делает Service и Repository? подскажите пожалуйста. ибо не понимаю зачем их оба.
Imho
Без сервисного слоя никак, а репо я бы заменил тем кто сохраняет сущности.
И плевать что принято интерфейсами что то там.

Да заменить то можно, но больше кода писать придется. И это как раз тот случай, когда больше - не значит лучше. ИМХО.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644227
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett
Репозиторий предоставляет интерфейс для управления конкретной сущностью.
Сервис находится на уровне выше и управляет сущностями используя репозитории. При этом он может оперировать сразу несколькими типами сущностей (как в моем примере, удаляя картинку мы ее отвязываем от продукта).
Но это мое видение, не знаю на сколько корректное.

То бишь репозиторий относится к сущности определенной а сервис один и в нем можно делать действия с репозиториями? или как. чет не догоняю.

Я в инете нашел пример. В нем были и репозитории и сервисы. Но штука в том что они были идентичны. что написанный репозиторий, что сервис описывали и реализовывали одни и те же методы. Может я не так понял. хз
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644229
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettно больше кода писать придется.
Не верю, т.к.
А) несколько помню ты делал EJB. Для него конечно больше.
Б) управлять сущностью может менеджер.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644236
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Hettно больше кода писать придется.
Не верю, т.к.
А) несколько помню ты делал EJB. Для него конечно больше.
Б) управлять сущностью может менеджер.

Ну вот приведенном выше мною примере есть метод `findByIdAndFetchAllEagerly`
и если вдруг нужно будет найти Product и подгрузить все зависимости в разных сервисах, то придется либо дублировать запрос, либо инъектить один сервис в другой, что не очень красиво (тем более так можно и перекресные ссылки получить).
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644239
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так получается, что в репозиториях - запросы.
В сервисах - бизнеслогика.
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644241
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
Вот образец сервсного слоя:
12416653
Начинай от него плясать. Т.к. это бизнес логика!!!
...
Рейтинг: 0 / 0
Repository в Hibernate 5
    #39644242
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Tsyklop,
Вот образец сервсного слоя:
12416653
Начинай от него плясать. Т.к. это бизнес логика!!!

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


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