SqlProjection - 不能使用实体名称,不能使用{alias}进行比较

时间:2015-01-03 06:31:19

标签: hibernate criteria hibernate-criteria

我有两个问题。

  1. 我正在使用Criteria和Projections来检索数据。我将结果数据集映射到DTO。我不得不使用SqlProjection获取一些数据,但似乎sql投影不接受实体名称,但它在数据库中的表名。
  2. 即。我不能使用类似下面的内容

    .add(Projections.sqlProjection("(select count(c.someData) 
         from EntityName c where c.id= " + 
         passedID + ") as someDataField",  
         new String[] { "someDataField" }, 
         new Type[] { IntegerType.INSTANCE }))
    

    但如果我用列名和表名替换它就可以了。像这样,

    .add(Projections.sqlProjection("(select count(c.SOME_DATA_COLUMN) 
             from TABLE_NAME c where c.ID_COLUMN= " + 
             passedID + ") as someDataField",  
             new String[] { "someDataField" }, 
             new Type[] { IntegerType.INSTANCE }))
    

    为什么会这样?

    1. 另外,我有一个实体实体,它扩展了一个类'Auditable'其中有一个字段' createdBy'。可审计包括几乎所有表格中常见的字段,例如“记录状态”,“创建日期”,“创建日期”等字段。等
    2. 我正在尝试从与USERS_TABLE对应的Users实体中检索数据。 我有First_Name和Last_Name列和User_ID,表中的所有Varchar和字段都在实体中。

      每个表中的Created_By列引用USERS_TABLE中的User_ID。

      现在,我想使用createdBy字段检索名字和姓氏。

      我写了一个sqlProjection以及其他投影。它看起来如下。

      .add(Projections.sqlProjection(
           "(select concat(user.First_Name, ' ', user.Last_Name) from USERS_TABLE user " 
                          + "where user.User_ID = {alias}.mappedParentEntity.createdBy) as createdBy",  
                           new String[] { "createdBy" }, 
                           new Type[] { StringType.INSTANCE }))
      

      {alias}指的是root实体的别名。

      我收到错误消息

        

      未知栏' this_.mappedParentEntity.createdBy'在' where子句'

      这个解决方案可能是什么?

0 个答案:

没有答案