我在使用 Hibernate 时遇到了一个非常特殊的情况:
我们的系统有一个调查模块,一个调查有多种问题,而我们的题目、提示等问题呈现信息应该支持database
管理员可以定义的国际化,所以一个问题对应几种语言的问题词汇。以下是ER图:
这是 POJO:
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 QuestionModel:
@Entity
@Table(name = "t_question")
public class QuestionModel extends BasicModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "questionId")
private Set<VocabularyModel> vocabularies = new HashSet<VocabularyModel>();
}
POJO词汇模型:
@Entity
@Table(name = "t_vocabulary")
public class VocabularyModel extends BasicModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String language;
private String title;
private String prompt;
}
所以图表和 POJO 关系清楚地显示了它们的关系。现在当用户进行调查时,一次只需要一种语言的词汇对象来提问,是的,我们可以通过从包含所有语言词汇的词汇集中手动过滤得到它,但它没有意义并产生较低的性能。在我们的系统中,父对象的所有子集都是loaded lazy
,那么在我在这里获得像 SurveyModel 这样的父对象后,如何将语言之类的参数传递给子查询以过滤词汇集?我试图使用Hibernate Filters
,但它似乎与我的情况不符。
任何人都可以给我帮助和想法吗?提前非常感谢。
编辑:我有另一种方法,只获取调查而不获取其子对象,然后使用语言等参数手动查询其子对象。但它并没有充分利用 Hibernate。所以我也想在 Hibernate 中寻找一种方法来实现我的目标。