@Entity
@Table(name = "person")
public class Person {
private Long id;
@OneToMany(mappedBy = "person")
@Filter(name = "localeFilter", condition = "locale= :localeFilterParam")
private Set<PersonLocale> personLocales;
}
@Entity
@Table(name = "person_locale")
public class Person {
private Long id;
private String name;
private String locale;
@ManyToOne
@JoinColumn("person_id")
private Person person;
}
sample data:
Person
id
1
PersonLocale
id person_id locale name
1 1 en John
2 1 fr Jean
我的应用程序有一种默认语言,例如:&#39; en
&#39;
默认语言的数据是强制性的,而其他语言是可选的。
当我查询人员详细信息时。
我使用Hibernate过滤器来过滤我想要的语言环境。
如果我有我设置的localeFilterParam
语言环境的数据,它工作正常。
但是,当我传入一个没有数据库记录的语言环境时,例如&#39; de
&#39;。
personLocales
将为空。
hibernaate是否具有类似的功能
- 检查过滤器是否有记录
- 如果没有,它将使用默认语言personLocale
en
我知道本机SQL中有CASE
语句。我怎么能在休眠中做到这一点?
编辑:
我打算不过滤语言环境,而是加载所有语言环境。 然后,以编程方式获取我想要的语言环境,如果语言环境数据为null,我仍然可以获得默认语言。
这种设计效率还是差?
当语言环境数量增加时,它可能会加载许多不需要的语言环境数据
编辑: 发现HQL支持case语句,但仅适用于不选择的地方