Hibernate动态能否将参数传递给子集查询?

Hibernate动态能否将参数传递给子集查询?,hibernate,database-design,orm,hibernate-mapping,Hibernate,Database Design,Orm,Hibernate Mapping,我在使用Hibernate时遇到了一个非常特殊的情况: 我们的系统有一个调查模块,单个调查有多种问题,我们的问题表示信息如标题、提示应该支持国际化,管理员可以在数据库中定义,因此单个问题对应问题词汇的多种语言。以下是ER图: 这里是波乔: POJO调查模型: @Entity @Table(name = "t_survey") public class SurveyModel extends BasicModel { @Id @GeneratedValue(strategy =

我在使用Hibernate时遇到了一个非常特殊的情况:

我们的系统有一个调查模块,单个调查有多种问题,我们的问题表示信息如标题、提示应该支持国际化,管理员可以在
数据库中定义,因此单个问题对应问题词汇的多种语言。以下是ER图:

这里是波乔:

POJO调查模型:

@Entity
@Table(name = "t_survey")
public class SurveyModel extends BasicModel {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "surveyId")
    private Set<QuestionModel> questions = new HashSet<QuestionModel>();
}
因此,图表和POJO关系清楚地显示了它们之间的关系。现在,当用户进行调查时,一次只需要一种单一语言的词汇对象来回答问题,是的,我们可以通过从包含所有语言词汇的词汇集中手动筛选得到,但这没有意义,并且产生的性能较低。在我们的系统中,父对象的所有子集都是惰性加载的
,那么在这里获得父对象SurveyModel之后,如何将类似于语言的参数传递给子查询以过滤词汇集呢?我试图使用
Hibernate过滤器
,但似乎与我的情况不符

有人能给我帮助和建议吗?非常感谢


编辑:我找到了另一种方法,只获取测量而不获取其子对象,然后使用类似参数的语言手动查询其子对象。但是它没有充分利用Hibernate。因此,我也想在Hibernate中寻找一种方法来实现我的目标。

经过半天的工作,我终于找到了解决这个问题的方法。它仍然是休眠过滤器。以下是解决该问题的说明

1、在目标实体上定义一个过滤器,如下所示:

@FilterDef(name="questionLanguage", parameters=@ParamDef(name="language", type="string"), defaultCondition="language='cn'")
2、在set对象上添加
过滤器

@Filter(name="questionLanguage", condition="language = :language")
3,由于筛选器的作用域是单个
会话
,因此我们需要启用
筛选器
,并在查询父实体对象之前设置参数

session.enableFilter("questionLanguage").setParameter("language", language);
为完成这件事感到高兴。^。^

@Filter(name="questionLanguage", condition="language = :language")
session.enableFilter("questionLanguage").setParameter("language", language);