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。当stagenull 时,我没有得到行。在数据库中。 【参考方案1】:

将 CriteriaSpecification.LEFT_JOIN 设置为别名函数

.createAlias("branch", "br" , CriteriaSpecification.LEFT_JOIN) .createAlias("caseStage", "stage", CriteriaSpecification.LEFT_JOIN)

【讨论】:

亲爱的兄弟,有什么方法可以同时使用CriteriaSpecification.LEFT_JOINDetachedCriteria 吗?【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate中Criteria的完整用法

hibernate的Criteria Query(转)

hibernate criteria模糊查询 怎么写

Hibernate- Criteria 简易

Hibernate学习笔记---Criteria接口

hibernate-criteria查询