2014-09-11 50 views
0

兩個實體:的EclipseLink:生成實體沒有加入

Customer <--- Account 
id    id 
name   customerId (FK to Customer) 
       balance 

的EclipseLink「生成實體從表」生成兩個實體類。 Customer提及Account,反之亦然。

public class Customer { 
    Integer id; 
    String name; 
    Account account; 
} 

public class Account { 
    Integer id; 
    Customer customer; 
    Double balance; 
} 

要求:生成與關係屬性爲基本類型,而不是實體名稱的實體:

public class Customer { 
    Integer id; 
    String name; 
    Integer accountId; // <-- this is id instead of Account 
} 

public class Account { 
    Integer id; 
    Integer customerId; // <-- this is id instead of Customer 
    Double balance; 
} 

我們爲什麼需要這樣的: CustomerAccount由單獨的應用程序進行管理,因此封裝在獨立戰爭。每場戰爭都可能部署在單獨的應用服務器上。如果客戶應用程序需要帳戶詳細信息,則它將使用帳戶應用程序提供的公共API並且不會直接從數據庫讀取。這是爲了避免客戶應用程序在不知道帳戶應用程序的情況下自行修改帳戶實體。

Eclipselink生成可以選擇關閉關係生成。有沒有辦法只生成ID而不是實體類名?還是有更好的方法來管理這個?

回答

0

我想我會以不同的方式進行管理。對於這個答案,我假設你正在使用Eclipse功能來生成實體類?一般來說,我只做一次,如果有變化,請親手動手。這對我來說似乎更容易。它也避免了Eclipselink爲了自己的利益而過於聰明 - 這聽起來像是你所遭受的。

明智的設計我想你想要一個外鍵的緊密耦合而沒有數據鏈接的隱含效應。如果您未定義表關聯 Eclipselink將只爲您的列生成本機類型。這當然會失去基於數據庫的外鍵耦合。如果您的數據庫啓用了Cascading,那可能會特別有問題。

老實說,這聽起來更像是「誰擁有數據」問題,而不是嚴格的編程問題。也許你的問題會更好地解決您可以同意的服務層類?或者,他們可能會發布可包含的@NamedQueries?最後,數據庫本身總是存儲過程 - 這些通常是令人沮喪的來源,但安全人員喜歡它們。