繁体   English   中英

Spring Data JPA(休眠)与动态条件的一对多关系

[英]Spring Data JPA (Hibernate) One to Many Relationship with Dynamic Condition

我的两个实体AirportAirportTranslation之间存在一对多的关系:

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可能是最好的选择,但是我找不到用于Spring Boot应用程序的任何干净有效的示例。

没有什么选择。

Java过滤

简单,但很慢,我会考虑设计气味,以过滤getter中的所有数据。

出于性能方面的考虑,我们宁愿选择筛选数据库中的数据。

查询过滤

另一种选择是将过滤器手动添加到存储库,但是每次添加新过滤器时,您都必须始终记住将过滤器放入查询中。

这会带来一些维护问题。

休眠过滤

要获取Hibernate过滤和Spring Data Jpa,有些棘手。

由于Spring Repositories是不与EntityManagers / Session对象进行交互的抽象,因此我们必须在会话上设置过滤条件以进行查询,这与制作手动过滤器几乎相同。

有关此解决方案的更多信息,请参阅LINK。

弹簧规格

我考虑使用Spring规范,这是最干净,最适合使用某些业务/系统逻辑进行过滤的方法。 Spring文档中有一章介绍了一些出色的示例,因此我不会将其粘贴粘贴。

请参考https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM