请帮助您解决以下问题:
我的课程如下:
class MasterAssociation {
String name
Survey survey // can be null
Object other
// Lots of other attributes
}
class Survey {
String name
// Lots of other attributes
}
class SurveyQuestion {
String name
QuestionType type
Survey survey
// Lots of other attributes
}
(由于各种原因,上述关系只能是单向的。)
我有一种方法需要根据各种标准返回选定的MasterAssociations。我所拥有的新标准是仅返回具有包含特定问题类型的调查的MasterAssociations。现有的代码都是基于HQL的,所以我想保留它(我知道SQL中的解决方案,但不是真的想转换所有现有的代码,也不是为这种情况创建一个特殊的方法)。
我该如何做? (这是伪代码)
select MasterAssociation ma
// lots of existing code using different flags to construct query
// based on name, etc.
if (newSpecialFlag) {
where ma.survey is not null
and where ma.survey has SurveyQuestion.type = QuestionType.XYZ
}
我真的很感激任何帮助。
感谢。
答案 0 :(得分:0)
我想我已经弄明白了(下面有一些Groovy语法,但它应该仍然可读)
我在其他地方读过有关修改原始from子句以包含次要对象的内容,即使实际的select没有选择它。
答案:
String hql = "select ma from MasterAssociation as ma"
if (newSpecialFlag) {
hql += ", SurveyQuestion as sq "
criteria += " AND sq.type = " + QuestionType.XYZ
criteria += " AND ma.survey.id in (sq.survey.id) "
}