Java 具有持久性的实体类中的Id与引用
这是一个纯粹的理论问题。假设我有一个实体Foo链接到另一个实体栏。显然,两者都被分配了一个唯一的id,持久性系统使用该id链接它们。我的Foo实体类应该引用Bar对象还是Bar对象id?代码:Java 具有持久性的实体类中的Id与引用,java,oop,entity,persistence,class-design,Java,Oop,Entity,Persistence,Class Design,这是一个纯粹的理论问题。假设我有一个实体Foo链接到另一个实体栏。显然,两者都被分配了一个唯一的id,持久性系统使用该id链接它们。我的Foo实体类应该引用Bar对象还是Bar对象id?代码: class Foo { int id; Bar bar; } 或 这是一个相当基本的问题,但我没能找到一个令人满意的答案。他几乎没有什么见解 在我看来,使用引用更符合OOP的理念,但在不使用延迟加载的情况下,很容易生成空引用和性能问题。另一方面,使用id会更快更容易,但可能会很快导致数据
class Foo {
int id;
Bar bar;
}
或
这是一个相当基本的问题,但我没能找到一个令人满意的答案。他几乎没有什么见解
在我看来,使用引用更符合OOP的理念,但在不使用延迟加载的情况下,很容易生成空引用和性能问题。另一方面,使用id会更快更容易,但可能会很快导致数据不一致
那么,我们应该做什么,为什么
- 始终使用id
- 始终使用引用
- 取决于模型的类型
还有人能给我指一些关于这个问题的文献参考吗?我的经验是,我总是需要外键,所以至少我需要:
class Foo {
int id;
int barId;
}
包括对Bar的引用取决于应用程序。如果您使用的是ORM,那么Foo可以将条引用作为直接或惰性关系:
class Foo {
int id;
int barId;
Bar bar;
}
由于Bar也有一个id字段,因此使用Bar引用代替其id也是存储外键的有效解决方案(在这种情况下不能使用延迟加载)。在Foo中同时拥有id和引用似乎是多余的,不是吗?如果你可以用id访问它,为什么还要添加一个引用呢?basbodart,我理解你的观点。这取决于您使用的ORM。如果ORM可以在bar中使用外键,那么就不需要barId。实际上我不使用外键。无论如何,这是不相关的,ORM实现也需要面对这个问题。
class Foo {
int id;
int barId;
Bar bar;
}