Hibernate:在使用列作为一对多关系行的旧表上映射一对多关系

Hibernate:在使用列作为一对多关系行的旧表上映射一对多关系,hibernate,mapping,one-to-many,Hibernate,Mapping,One To Many,我正在处理数据库中无法更改的表。该表有一个用户联系人列表,例如电子邮件、facebook、twitter等。每个联系人都有一列。所以这个表看起来像这样: USER { user_id, email, facebook, twitter, ... } 我需要将此数据库链接到使用Spring/Hibernate的应用程序。此应用程序期望与用户的关系为一对多,这意味着: User { user_id, ... } Contacts {

我正在处理数据库中无法更改的表。该表有一个用户联系人列表,例如电子邮件、facebook、twitter等。每个联系人都有一列。所以这个表看起来像这样:

USER {
    user_id,
    email,
    facebook,
    twitter,
    ...
}
我需要将此数据库链接到使用Spring/Hibernate的应用程序。此应用程序期望与用户的关系为一对多,这意味着:

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

如何使用hibernate映射实现此转换?

只是不要将
联系人
设置为实体,而是将其设置为POJO,并在用户的
获取联系人
方法中返回这些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;
}
public List getContacts(){
列表结果=新建ArrayList();
如果(this.facebook!=null){
添加(新联系人(“facebook”,this.getId(),this.facebook));
}
如果(this.twitter!=null){
add(新联系人(“twitter”,this.getId(),this.twitter));
}
// ...
返回结果;
}
在联系人中有一个ID是没有意义的,因为联系人不是一个实体


请注意,您的问题有点奇怪:通常,您是基于底层数据库模式设计Hibernate实体的。如果基础架构如您所述,为什么要这样设计应用程序。这没有多大意义。

该应用程序可以从各种数据库中挖掘数据。它对数据库一无所知。我们使用hibernate将数据库映射到应用程序能够理解的POJO中。我们当然有很多方法可以通过修改代码来解决这个问题。不过,我希望hibernate映射能够无缝地实现这一点。