Spring Data JPA (Hibernate) Отношение один ко многим с динамическим условием - PullRequest
0 голосов
/ 18 октября 2018

У меня есть отношения один ко многим между двумя моими энтитами, Airport и AirportTranslation:

public class Airport {
    @Id
    @Column(name = "id")
    private Long id;

    @OneToMany(mappedBy="airport", fetch = FetchType.LAZY)
    private List<AirportTranslation> translations;
}

И:

public class AirportTranslation implements Serializable {
    @Id
    @Column(name = "id", updatable = false)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "airport_id")
    private Airport airport;

    @Column(name = "lang")
    private String lang;

    @Column(name = "name")
    private String name;    
}

Теперь я хочу получить всепереводы аэропорта, основанные на текущем языке системы, с использованием обычного синтаксиса: airport.getTranslations().

Из-за того, что текущий язык является динамическим, я не могу использовать hibernate @Where.

Я думаю, что использование Hibernate @Filter может быть лучшим вариантом, но я не могу найти какой-либо чистый, работающий образец этого для приложений с весенней загрузкой.

1 Ответ

0 голосов
/ 18 октября 2018

Вариантов немного.

Фильтрация Java

Простая, но медленная и что-то, что я бы посчитал запахом дизайна, чтобы отфильтровать все данные в геттере.

Мы бы предпочли фильтровать данные в базе данных по соображениям производительности.

Фильтрация запросов

Другой вариант - вручную добавить фильтры в свои репозитории, однако вам придется ВСЕГДА не забывать вставлять фильтры в свои запросы каждый раз, когда вы добавляете новые.один.

, что создает некоторые проблемы с обслуживанием.

Hibernate Filtering

Получить Hibernate Filtering и Spring Data Jpa немного сложно.

Поскольку Spring Repositories - это абстракция, которая не взаимодействует с объектами EntityManager / Session, но мы должны установить фильтрацию в нашем сеансе для запроса, который мы хотим сделать, что почти так же, каксоздание ручных фильтров.

Для получения дополнительной информации об этом решении, пожалуйста, обратитесь к LINK

Пружинные характеристики

Самый чистый и наиболее подходящий для фильтрации с некоторымибизнес / системная логика, я бы подумал об использовании Spring Specifications.В документации по Spring есть глава с некоторыми замечательными примерами, поэтому я не буду копировать ее.

Пожалуйста, обратитесь к https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...