2013-03-23 85 views
0

我正在使用Spring JDBC進行應用程序的開發,並且遇到了一個問題。在我的領域層,我有領域;原始類型和對象關聯。如果一個人屬於市,我有:Spring JDBC一對一關係

public class Person { 

    private Municipality municipality; 

    // More code 
} 

public class Municipality { 
    // More code 
} 

在數據庫中,你與主+外鍵建模。在這種情況下,個人表具有市政表主鍵的外鍵。我已經爲人和市建立了一個倉庫。現在我想檢索一個人,但我也想同時連接市政府。

我做的第一件事就是找到使用Person存儲庫的人。然後我想找到屬於這個人的市政府。然而目前我沒有在我的域對象中建模的外鍵。這意味着,我在Person類中沒有private int municipality_id字段。這將導致域對象與數據庫耦合(至少現在是關於它)。

發出另一個查詢只是爲了找到municipality_id感覺不正確。我怎麼解決這個問題?不過,我需要municipality_id找到市政府。

+0

在模型中添加市政ID或使用ORM(JPA,Hibernate等)。注意:模型表示來自數據庫的數據。有一個外鍵字段的問題是什麼? – 2013-03-23 00:06:14

+0

這不意味着域層「知道」我使用數據庫進行持久性嗎?我的意思是,爲什麼你會在模型中擁有外鍵?或者它是okey? – LuckyLuke 2013-03-23 00:08:46

+0

@LuckyLuke所有領域層知道的是,你可以用一個唯一的數字來標識其他類型的實體,這個數字可以讓你從* some *持久存儲庫中獲取它們。不幸的是,我不確定如何讓域類完全不會被持久化。 – millimoose 2013-03-23 00:10:26

回答

1

以下是一些可能的選項。

  1. 在人物上加上自治市id。這聽起來像你有這個方法的問題。這並不妨礙我。我只是簡單地將查詢中其他人數據的id帶回來。
  2. 發出第二個查詢以獲取該市政府,然後在該人物對象上填充該市政府。我也沒有看到這種方法的任何問題。
  3. 將兩個表加在一起並將兩個對象的數據帶回來。在你的映射器中,你將創建一個自治體對象並將其設置到人物對象中。