在grails/Hibernate标准中使用createAlias

在grails/Hibernate标准中使用createAlias,hibernate,grails,hibernate-criteria,Hibernate,Grails,Hibernate Criteria,在grails中,关于createAlias()的文档很少(我所能找到的最多) 在上面的代码中(从已经存在的代码库中),为什么我们需要在“customer”属性(嵌套在PurchasedSessionHistory中的customer类的)上定义别名 为什么我不能直接访问“客户”上的“用户”属性,并且必须定义别名 一般来说,createAlias在这种情况下有什么用?猜测它与“session”在大多数数据库中是保留字这一事实有关,但我不能肯定。@ToddSharp我更改了示例。它与这个词没有任何

在grails中,关于createAlias()的文档很少(我所能找到的最多)

在上面的代码中(从已经存在的代码库中),为什么我们需要在“customer”属性(嵌套在
PurchasedSessionHistory
中的
customer
类的)上定义别名

为什么我不能直接访问“客户”上的“用户”属性,并且必须定义别名


一般来说,createAlias在这种情况下有什么用?

猜测它与“session”在大多数数据库中是保留字这一事实有关,但我不能肯定。@ToddSharp我更改了示例。它与这个词没有任何关系,因为当我们使用任何其他域实例时,情况也是如此。我知道现在的情况是,我的旧代码无法正常工作,无法为我在投影中引用的关联指定连接。Hibernate不喜欢我将关联名称和连接类型指定为参数(不再!)——因此作为一种解决方法,我正在为关联创建一个别名,并通过它引用关联字段,例如grails 2.4.5上的projections{property'myalias.city'}@Dave I
PurchasedSessionHistory.withCriteria {
        createAlias("customer", "_customer", JoinType.LEFT_OUTER_JOIN)
        createAlias("_customer.user", "_user", JoinType.LEFT_OUTER_JOIN)
        createAlias("membership", "_membership", JoinType.LEFT_OUTER_JOIN)
        createAlias("promotion", "_promotion", JoinType.LEFT_OUTER_JOIN)


// .....

}