2011-11-23 96 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中。 我们当然有很多方法可以通过代码更改来解决这个问题。然而,我正在寻找休眠映射来完成这个无缝的。 –