java - 每次加载实体时应用休眠过滤器
问题描述
我正在尝试编写多语言软件。在休眠中使用过滤器,我希望每次访问实体时,只加载特定语言的翻译。
@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
被忽略。我怎样才能做到这一点?
解决方案
推荐阅读
- sql - 如何编写 SQL 查询来确定登录次数最多的用户的用户名和电子邮件地址
- sql - SQL - 使用查询字符串删除 url 中的尾随“/”
- java - 使用 apache lang DateUtil 的日期格式失败
- kendo-ui - 当我们添加超过剑道多选宽度的新项目时如何修复剑道对齐
- time-series - 如何为谷歌地球引擎中的特征集合中包含的每个多边形创建时间序列(NDVI)?
- regex - 正则表达式 - 在 grep 中组合多个条件
- java - 如何在 GitHub 服务器上部署我的 Web 应用程序?
- aws-lambda - 将函数策略分配给允许所有 CloudWatch Events 规则调用 lambda 的 lambda?
- scala - 如何使用 scala spark 或 python spark 检查 Azure blob 存储路径是否存在
- c# - 无法从 Windows 服务连接到 sftp 服务器