具有if条件的Hibernate过滤器

时间:2014-09-25 07:14:11

标签: java sql hibernate

@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语句,但仅适用于不选择的地方

0 个答案:

没有答案