2011-11-23 92 views
1

我正在使用無法更改的數據庫上的表。該表格包含用戶聯繫人列表,例如電子郵件,臉譜,推特等。每個聯繫人都有一列。所以表看起來是這樣的:休眠:在使用列作爲一對多關係的行的傳統表上映射一對多關係

USER { 
    user_id, 
    email, 
    facebook, 
    twitter, 
    ... 
} 

我需要這個數據庫鏈接到使用Spring/Hibernate的應用程序。此應用程序預計該關係是用戶意義上的一對多關係:

User { 
    user_id, 
    ... 
} 
Contacts { 
    contact_id, 
    user_id, 
    type, 
    value 
} 

如何使用hibernate映射實現此轉換?

回答

0

只是不要讓Contact的實體,而是使它成爲一個POJO,並在getContacts方法用戶的返回這些POJO的列表:

public List<Contact> getContacts() { 
    List<Contact> result = new ArrayList<Contact>(); 
    if (this.facebook != null) { 
     result.add(new Contact("facebook", this.getId(), this.facebook)); 
    } 
    if (this.twitter != null) { 
     result.add(new Contact("twitter", this.getId(), this.twitter)); 
    } 
    // ... 
    return result; 
} 

有一個ID在接觸不真正有道理,因爲聯繫人不是一個實體。

請注意,您的問題有點奇怪:通常,您基於底層數據庫架構設計Hibernate實體。爲什麼如果底層架構如您所描述的那樣設計應用程序就像這樣。這沒有多大意義。

+0

該應用程序可以從各種數據庫中挖掘數據。它不知道數據庫。我們使用hibernate將數據庫映射到應用程序可以理解的POJO中。 我們當然有很多方法可以通過代碼更改來解決這個問題。然而,我正在尋找休眠映射來完成這個無縫的。 –