gpt4 book ai didi

hibernate - GORM : List all the domain instances belonging to User (root object)

转载 作者:行者123 更新时间:2023-12-03 08:15:15 26 4
gpt4 key购买 nike

我一直在使用 grails。有些东西我仍然不知道如何正确实现。

我有一个域类(比如说用户),它包含一个列表,它可能是任何域类(项目、用户等)。有没有办法让这个开箱即用?

目前我正在按照以下方式进行操作:

我有一个包含以下属性的 UserLink:

class UserLink{
User user
String className
Long refId
}

然后我有一个服务,它加载给定用户的所有链接,然后是链接中的相应对象,并将它们作为列表返回。

我认为这种方法不是最好的,并且可能会导致 future 的性能问题

你怎么看?你有更好的设计理念吗?

谢谢,
尼古拉斯

最佳答案

它真的有,还是只有某个类的子集?我相信你会有更多与用户没有直接关系的域类。

如果是这样,您可以创建一个 UserAsset带有 belongsTo=[user: User] 的类或接口(interface)prop,并继承/实现它。

然后找到所有实现它的领域类,并用 clazz.findByUser() 查询每个类。 , 像:

GrailsClass[] classes = grailsApplication.getArtefacts('Domain')
GrailsClass[] userAssetClasses =
classes.clazz.findAll { UserAsset.class.isAssignableFrom(it) }
List<UserAsset> allUserAssets =
userAssetClasses.clazz*.findAllByUser(myUser).flatten()

编辑 : 如果我们说的是 M:M,它只会改变最后一行,即 userAssetClasses被查询。
UserAsset将有 hasMany=[users:User]属性(property)。

像:
List<UserAsset> allUserAssets = userAssetClasses.clazz.collect{ 
Class domainClass ->
it.withCriteria {
users {
eq('id', myUser.id)
}
}
}.flatten()

关于hibernate - GORM : List all the domain instances belonging to User (root object),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911990/

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