Hibernate Criteria, createAlias() If Alias is Null
Posted
技术标签:
【中文标题】Hibernate Criteria, createAlias() If Alias is Null【英文标题】: 【发布时间】:2016-11-21 06:57:32 【问题描述】:在下面的代码中..
有两个别名作为Entity Object
参考。
有时"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();
【问题讨论】:
我通常在HQL中使用coalesce(stage.name, '---'),那么Criteria Query有什么机制吗? 您面临什么问题..请解释一下?? 不应在数据库查询中决定和指定如何在屏幕上显示对象。修改您的表示层代码以显示您想要的任何内容,以防值为空。 你不能直接使用 Projections.sqlProjection 吗? @Zulfi,在上面的代码中有一个Projections
,属性名称为stage.name
。当stage
是null
时,我没有得到行。在数据库中。
【参考方案1】:
将 CriteriaSpecification.LEFT_JOIN 设置为别名函数
.createAlias("branch", "br" , CriteriaSpecification.LEFT_JOIN) .createAlias("caseStage", "stage", CriteriaSpecification.LEFT_JOIN)
【讨论】:
亲爱的兄弟,有什么方法可以同时使用CriteriaSpecification.LEFT_JOIN
和DetachedCriteria
吗?【参考方案2】:
@Koti Eswar 答案是正确的,但现在已弃用。
应该是这样的:
join('branch', JoinType.LEFT)
createAlias('branch', 'br')
在 Grails 3.3.5 中测试
【讨论】:
目前我正在使用JoinType.LEFT_OUTER_JOIN
以上是关于Hibernate Criteria, createAlias() If Alias is Null的主要内容,如果未能解决你的问题,请参考以下文章