Hibernate:在使用列作为一对多关系行的旧表上映射一对多关系
我正在处理数据库中无法更改的表。该表有一个用户联系人列表,例如电子邮件、facebook、twitter等。每个联系人都有一列。所以这个表看起来像这样: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 {
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映射能够无缝地实现这一点。