gpt4 book ai didi

oracle - 使用具有参数的GORM在一对一Grails域上加入查询

转载 作者:行者123 更新时间:2023-12-02 16:00:57 26 4
gpt4 key购买 nike

我有两个Grails domain类,可以这样说:

class Hero {
String name
Float level

Familiar familiar
}

class Familiar {
String name
Integer raceId
}

现在,我想要的是检索名称类似于给定 Hero的所有 FamiliarString,例如: "hachiko"。要使用 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!



它们之间的关系是可选的一对一关系。 (例如 Hero最多可以包含一个 Familiar),并且 idFamiliarHero相同。

最佳答案

您可以使用createCriteria

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

关于oracle - 使用具有参数的GORM在一对一Grails域上加入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30883444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com