首页 > 解决方案 > 每次加载实体时应用休眠过滤器

问题描述

我正在尝试编写多语言软件。在休眠中使用过滤器,我希望每次访问实体时,只加载特定语言的翻译。

@Entity
@Table(name = "province")
@FilterDef(name = "findByLanguage", parameters = {@ParamDef(name = "language", type = "string")})
public class Province {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "country_id", nullable = false)
    private Country country;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "province_id")
    @Filter(name = "findByLanguage", condition = "language = :language")
    private Set<ProvinceTranslation> translations;
}

这正如我对省份的预期一样,但Country也有一个翻译列表,我希望该CountryTranslation列表在我加载一个省份时也只包含指定的语言。但是这段代码不起作用:

@Entity
@Table(name = "country")
@FilterDef(name = "findByLanguage", parameters = {@ParamDef(name = "language", type = "string")})
public class Country {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "country_id")
    private List<Province> provinces;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "country_id")
    @Filter(name = "findByLanguage", condition = "language = :language")
    private Set<CountryTranslation> translations;
}

因此,如果我Country直接加载一切正常,但如果我在其中加载Province和访问Country,加载Country是不同的并且@Filter被忽略。我怎样才能做到这一点?

标签: javaspringhibernatejpaspring-data-jpa

解决方案


推荐阅读