如果我有一个ID,但没有说明它属于哪个域类,我应该如何加载它?
我可以一次一个地测试我的应用程序中的每个域类的get(),但是代码将难以管理而且效率很低。有替代方法吗?
答案 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的情况。