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

标签 hibernate grails grails-orm

我一直在使用 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/

相关文章:

grails - 运行Maven-grails测试案例时遇到问题

grails - 如果情况下,在不真实的情况下奇怪地调用合并

hibernate - 在 GORM 中查询关联的子查询

java - 类型不匹配 : inferred type is KClass<GenderStatistics> but Class<TypeVariable(T)! >!预计

java - 使用 Apache Spark 的 Hibernate 持久化导致进程阻塞

maven - 使用 IntelliJ 12.1.2 和 Maven 项目时 Grails 应用程序不同步

grails - 如何重写 GORM/Grails 的 addTo* 和 RemoveFrom* 方法?

Grails 2.x createCriteria 'or' 不适用于嵌套关联

java - 即使数据来自 Ehcache,c3p0 也始终调用 commit

java - Hibernate查询转Sql查询