Hibernate Criteria,createAlias() 如果 Alias 为 Null
Hibernate Criteria, createAlias() If Alias is Null
在下面的代码中..
有两个 Alias 作为 Entity Object
Reference。
有时 "caseStage" as stage
在数据库中可以是 null
。
当 "caseStage"
为空时,我希望 stage.name
值为空 String
或像 "---"
等自定义的值
session.createCriteria(CaseMasterPO.class)
.createAlias("branch", "br") // BranchPO.class
.createAlias("caseStage", "stage") // CaseStagePO.class
.setProjection(Projections.projectionList()
.add(Projections.property("caseCode"))
.add(Projections.property("br.zoneCode"))
.add(Projections.property("stage.name")) // Problem, when stage == null
)
.add(Restrictions.eq("caseCode", caseCode)).uniqueResult();
将CriteriaSpecification.LEFT_JOIN设置为别名函数
.createAlias("branch", "br", CriteriaSpecification.LEFT_JOIN)
.createAlias("caseStage", "stage", CriteriaSpecification.LEFT_JOIN)
@Koti Eswar 答案是正确的,但现在已弃用。
应该这样做:
join('branch', JoinType.LEFT)
createAlias('branch', 'br')
在 Grails 3.3.5 中测试
在下面的代码中..
有两个 Alias 作为 Entity Object
Reference。
有时 "caseStage" as stage
在数据库中可以是 null
。
当 "caseStage"
为空时,我希望 stage.name
值为空 String
或像 "---"
等自定义的值
session.createCriteria(CaseMasterPO.class)
.createAlias("branch", "br") // BranchPO.class
.createAlias("caseStage", "stage") // CaseStagePO.class
.setProjection(Projections.projectionList()
.add(Projections.property("caseCode"))
.add(Projections.property("br.zoneCode"))
.add(Projections.property("stage.name")) // Problem, when stage == null
)
.add(Restrictions.eq("caseCode", caseCode)).uniqueResult();
将CriteriaSpecification.LEFT_JOIN设置为别名函数
.createAlias("branch", "br", CriteriaSpecification.LEFT_JOIN) .createAlias("caseStage", "stage", CriteriaSpecification.LEFT_JOIN)
@Koti Eswar 答案是正确的,但现在已弃用。
应该这样做:
join('branch', JoinType.LEFT)
createAlias('branch', 'br')
在 Grails 3.3.5 中测试