Гибернация: отображение отношения один ко многим в устаревшей таблице, в которой столбцы используются в качестве строк для отношения один ко многим - PullRequest
1 голос
/ 23 ноября 2011

Я работаю с таблицей в базе данных, которую я не могу изменить. В таблице есть список контактов пользователя, например, электронная почта, Facebook, Twitter и т. Д. Каждый из этих контактов имеет столбец. Итак, таблица выглядит примерно так:

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

Мне нужно связать эту базу данных с приложением, которое использует Spring / Hibernate. Это приложение ожидает, что отношение «один ко многим» для пользователя означает:

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

Как мне добиться этого преобразования с помощью отображений гибернации?

1 Ответ

0 голосов
/ 23 ноября 2011

Просто не делайте Contact сущностью, а сделайте ее POJO и верните список этих POJO в методе getContacts пользователя:

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;
}

Имея идентификаторконтакт на самом деле не имеет смысла, поскольку Контакт не является сущностью.

Обратите внимание, что ваш вопрос немного странный: обычно вы проектируете свои объекты Hibernate на основе базовой схемы базы данных.Зачем использовать приложение, разработанное таким образом, если основная схема соответствует описанной вами.Это не имеет особого смысла.

...