Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有持久性的实体类中的Id与引用_Java_Oop_Entity_Persistence_Class Design - Fatal编程技术网

Java 具有持久性的实体类中的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会更快更容易,但可能会很快导致数据

这是一个纯粹的理论问题。假设我有一个实体Foo链接到另一个实体栏。显然,两者都被分配了一个唯一的id,持久性系统使用该id链接它们。我的Foo实体类应该引用Bar对象还是Bar对象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;
}