使用带参数的GORM在一对一Grails域上加入查询

时间:2015-06-17 06:06:52

标签: oracle grails gorm

我有两个Grails domain课程,请说:

class Hero {
    String name
    Float level

    Familiar familiar
}

class Familiar {
    String name
    Integer raceId
}

现在,我想要的是检索所有Hero Familiar String,其名称与给定"hachiko"类似,示例:{{1} }。要使用SQL执行此操作,我只需执行与此类似的查询:

SELECT h.name, h.level
FROM HERO h JOIN FAMILIAR f ON h.id = f.ownerId
WHERE f.name LIKE '%hachiko%'

但我怎么能在Grails上做到这一点?这是我的代码:

String filter = "hachiko"
def hero = Hero.executeQuery(
    "SELECT h.name, h.level FROM HERO h JOIN h.familiar WHERE h.id = " +
    "h.familiar.ownerId and h.familiar.name LIKE :filter",
    [filter, "%$filter%"]
)

这会有用吗?我应该创建这些static属性(hasOnebelongsTo),我应该在哪里放置它们?因为到目前为止,没有这些static属性,我收到了error消息:

  

ORA-00904: "HERO0_"."FAMILIAR_ID": invalid identifier

添加了static个属性后,我得到了这个:

  

org.hibernate.MappingException: hasOne property [Hero.familiar] is not bidirectional. Specify the other side of the relationship!

他们的关系是可选一对一。 (例如,A Hero最多只能有一个Familiar),而id的{​​{1}}与Familiar的{​​{1}}相同。

1 个答案:

答案 0 :(得分:0)

您可以{/ 3}}使用

String filter = "hachiko"
def hero = Hero.createCriteria().list {
    familiar {
        like('name', filter)
    }    
}