2013-03-23 2 views
0

Я использую Spring JDBC для приложения, над которым я работаю, и перед вами стоит проблема. В моем доменном слое у меня есть поля; примитивных типов и ассоциаций объектов. Если лицо принадлежит к муниципалитету, у меня есть:Spring JDBC один к одному отношения

public class Person { 

    private Municipality municipality; 

    // More code 
} 

public class Municipality { 
    // More code 
} 

В базе данных вы моделируете это с помощью первичных + внешних ключей. Таблица лиц в этом случае имеет внешний ключ для первичного ключа таблицы муниципалитета. Я создал репозиторий для Лица и Муниципалитета. Теперь я хочу получить Человека, но я также хочу подключить к нему муниципалитет одновременно.

Первое, что я делаю, это найти человека, использующего репозиторий Person. Затем я хочу найти муниципалитет, который принадлежит Личности. Однако на данный момент у меня нет внешних ключей, смоделированных в моих объектах домена. Это означает, что у меня нет поля private int municipality_id в классе Person. Это приведет к тому, что объекты домена будут связаны с базами данных (по крайней мере, сейчас об этом).

Выдача другого запроса, чтобы найти муниципалитет_ид, считается некорректным. Как я могу решить эту проблему? Однако мне нужен муниципалитет, чтобы найти муниципалитет.

+0

Добавить в муниципалитетId в модель или использовать ORM (JPA, Hibernate и т. Д.). Примечание: модель представляет данные, поступающие из базы данных. В чем проблема наличия поля для внешнего ключа? –

+0

Не означает ли это, что доменный уровень «знает» о том, что я использую базу данных для сохранения? Я имею в виду, почему у вас в противном случае был бы внешний ключ в модели? Или это окей? – LuckyLuke

+0

@ LuckyLuke. Все, что знает доменный домен, это то, что вы можете идентифицировать объекты других типов с уникальным номером, который позволяет вам извлекать их позже из * некоторого * постоянного хранилища. К сожалению, я совсем не уверен, как сделать классы домена незнакомыми с тем, чтобы быть устойчивыми вообще. – millimoose

ответ

1

Вот некоторые возможные варианты для вас.

  1. Включите идентификатор муниципалитета на объект лица. Похоже, у вас есть проблема с этим подходом. Меня это не беспокоит. Я просто вернул бы идентификатор по другим данным человека в запросе.
  2. Задайте второй запрос, чтобы получить муниципалитет, а затем заполнить муниципалитет на объекте человека. Я тоже не вижу никаких проблем с этим подходом.
  3. Соедините две таблицы вместе и верните данные для обоих объектов. В вашем картографе вы создадите объект муниципалитета и установите его в объект person.
Смежные вопросы