Java Spring JDBC一对一关系

Java Spring JDBC一对一关系,java,spring,jdbc,spring-jdbc,Java,Spring,Jdbc,Spring Jdbc,我正在使用SpringJDBC开发一个应用程序,我面临一个问题。在我的领域层,我有字段;基本类型和对象关联。如果某人属于某个自治市,我有: public class Person { private Municipality municipality; // More code } public class Municipality { // More code } 在数据库中,使用主键+外键对此进行建模。在这种情况下,person表的主键有一个外键。我已经为个人

我正在使用SpringJDBC开发一个应用程序,我面临一个问题。在我的领域层,我有字段;基本类型和对象关联。如果某人属于某个自治市,我有:

public class Person {

    private Municipality municipality;

    // More code
}

public class Municipality {
    // More code
}
在数据库中,使用主键+外键对此进行建模。在这种情况下,person表的主键有一个外键。我已经为个人和市政当局创建了一个存储库。现在我想找回一个人,但同时我也想把市政当局和它联系起来

我要做的第一件事是找到使用person存储库的人员。然后我想找到属于这个人的市政府。但是目前我没有在我的域对象中建模外键。这意味着,Person类中没有
private int\u id
字段。这将导致域对象与数据库耦合(至少现在是这样)


仅仅为了查找市政id而发出另一个查询感觉不正确。我怎样才能解决这个问题?但是,我需要市政id才能找到市政。

这里有一些可能的选项供您选择

  • 在person对象上包括市政id。听起来你对这种方法有问题。这并不困扰我。我只需在查询中带回id和其他人数据
  • 发出第二个查询以获取市政当局,然后在person对象上填充市政当局。我认为这种方法也没有任何问题
  • 将两个表连接在一起,并返回两个对象的数据。在映射器中,您将创建一个市政对象,并将其设置到person对象中

  • 在模型中添加市政ID,或使用ORM(JPA、Hibernate等)。注意:模型表示来自数据库的数据。外键有一个字段有什么问题?这不意味着域层“知道”我使用数据库进行持久化吗?我的意思是,为什么在模型中会有外键?或者可以吗?@LuckyLuke域层所知道的是,你可以用一个唯一的数字来识别其他类型的实体,让你以后从某个持久性存储中获取它们。不幸的是,我完全不知道如何使域类完全不知道是可持久的。是的,这是真的。嗯,也许没有我第一次想的那么糟糕。@LuckyLuke:为什么你会被外键而不是主键所困扰?模型并不表示数据库中存储的内容。每次模式更改时都必须对其进行重构。在几乎不可能的情况下,如果不再使用关系数据库存储数据,您将面临更大的问题。有时,自然、务实的方式是更好的方式。