GORM:列出属于用户(根对象)的所有域实例
我使用 grails 已经有一段时间了。有一些事情我仍然不知道如何正确实施。
我有一个域类(假设是用户),其中包含一个列表,该列表可能是任何域类(项目、用户等)。有没有办法让它开箱即用?
目前我正在按以下方式执行此操作:
我有一个包含以下属性的 UserLink:
class UserLink{
User user
String className
Long refId
}
然后我有一个服务,它加载给定用户的所有链接,然后加载链接中的相应对象,并将它们作为列表返回。
我认为这种方法不是最好的,并且可能会导致未来的性能问题,
您对此有何看法?您有更好的设计想法吗?
谢谢, 尼古拉斯
I'm working with grails since a while. There is something I still don't know how to implement correctly.
I have a domain class (let's say User) which contains a List which can be potentially any domain class (Item, User, etc, etc). Is there a way to make this out of the box?
At the moment I'm doing it the following way:
I have a UserLink which contains following properties:
class UserLink{
User user
String className
Long refId
}
Then I have a service which loads all links for a given user and then the corresponding objects in the link, and returns them as a list.
I think this approach is not the best, and could lead to future performance problems
What do you think? Do you have better design ideas?
Thanks,
Nicolas
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它真的是任意的,还是只是类的某个子集?我相信您还会有更多与 User 不直接相关的域类。
如果是这样,您可以使用
belongsTo=[user: User]
属性创建一个UserAsset
类或接口,并继承/实现它。然后找到实现它的所有域类,并使用 clazz.findByUser() 查询每个类,例如:
编辑:如果我们正在谈论 M:M,它只会更改最后一行,查询 userAssetClasses 的方式。
UserAsset
将具有hasMany=[users:User]
属性。喜欢:
Is it really any, or only a certain subset of classes? I believe you'll have some more domain classes not directly related to User.
If so, you can create a
UserAsset
class or interface with abelongsTo=[user: User]
prop, and inherit/implement it.Then find all domain classes implementing it, and query each with
clazz.findByUser()
, like:edit: If we're talking M:M, it only changes last line, the way
userAssetClasses
are queried.UserAsset
will have ahasMany=[users:User]
property.Like: