如果给了我一个 ID,但没有指明它属于哪个域类,我应该如何加载它?
我可以一次针对我的应用程序中的每个域类测试 get(),但是代码将难以管理并且效率相当低。有替代方法吗?
正如其他人所说,仅使用 ID 很难做很多事情。您唯一真正的选择是尝试检索具有该 ID 的每个域类,但正如其他人所提到的,完全有可能存在多个具有该 ID 的实例的域类。
值得庆幸的是,获取应用程序中的所有域类并使用application.domainClasses
.
是的,只有一种方法:尝试 get() 每个域,直到找到一个。
顺便说一句,不同的域可以具有完全相同的 id(取决于配置)。
您可以将某种“元数据”添加到您的 id。
例如,假设您有 2 个域类:Book 和 Author。在数据库中,您为该表创建两个 id 序列,一个在 100000 - 199999 范围内,第二个在 200000-299999 范围内。
现在,当您有一个 Id 时,您可以检查它的范围并找出它是哪个域对象。它会比遍历所有域类并在它们上调用 get() 更快,特别是如果你有一些急切加载的集合。
但缺点是您必须以某种方式管理此范围,并始终记住它们,并确保涵盖序列用完免费 ID 的情况。
在不了解上下文的情况下,提出一些建议会更加困难。如果您有权访问返回 id 的实例,那么也许您可以找出该类,然后使用该类执行 get()。