如果域类未知,我如何才能有效地找到基于ID的域类实例?

时间:2012-06-19 16:41:55

标签: grails

如果我有一个ID,但没有说明它属于哪个域类,我应该如何加载它?

我可以一次一个地测试我的应用程序中的每个域类的get(),但是代码将难以管理而且效率很低。有替代方法吗?

4 个答案:

答案 0 :(得分:2)

是的,只有一种方法:尝试获取()每个域,直到找到一个。

顺便说一句,不同的域可以具有完全相同的ID(取决于配置)。

答案 1 :(得分:2)

正如其他人所说的那样,只用一个ID就很难做到。您唯一真正的选择是尝试使用该ID检索每个域类,但正如其他人提到的那样,完全有可能存在多个具有该ID实例的域类。

值得庆幸的是,通过使用application.domainClasses来获取应用程序中的所有域类并使用它们循环它们相当容易。

答案 2 :(得分:0)

在不了解情况的情况下,提出一些事情会更加困难。如果您有权访问返回id的实例,那么也许您可以找到该类,然后使用该类来执行get()。

答案 3 :(得分:0)

您可以在ID中添加某种“元数据”。

例如,假设您有2个Domain类:Book和Author。在数据库中,您为该表创建了两个ID序列,一个在100000 - 199999范围内,第二个在200000-299999范围内。

现在,当您拥有ID时,您可以检查范围并找出它是哪个域对象。它会比通过所有域类并在它们上调用get()更快,特别是如果你有一些渴望加载的集合。

但是缺点是你必须以某种方式管理这个范围,并且总是记住它们,并且一定要涵盖序列用完了免费ID的情况。