Как конвертировать немного разные таблицы? - PullRequest
2 голосов
/ 24 мая 2010

Есть ли способ преобразовать записи таблицы из старой таблицы в новую, используя тот же класс сущности?

Чтобы быть конкретным, вот аннотации моего класса сущности для новой таблицы:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "benutzer_id")
private Integer benutzerId;
@Basic(optional = false)
@Column(name = "benutzer_name")
private String benutzerName;
@Column(name = "benutzer_vorname")
private String benutzerVorname;
@Column(name = "benutzer_nachname")
private String benutzerNachname;
@JoinColumn(name = "gruppe_id", referencedColumnName = "gruppe_id")
@ManyToOne(optional = false)
private Gruppe gruppe;
@OneToMany(mappedBy = "benutzer")
private Collection<Bestellung> bestellungen;

В старой таблице отсутствуют столбцы "benutzer_vorname" и "benutzer_nachname", поэтому Hibernate вылетает, если пытается сопоставить записи таблицы.

Нужно ли создавать новый класс сущностейили можно конвертировать данные используя уже существующие?

Ответы [ 2 ]

1 голос
/ 24 мая 2010

Если вы подумываете о том, как перейти от одной структуры таблицы к другой, то Hibernate может оказаться не лучшим решением.

Если таблица плоская (без ассоциаций), то может быть очень просто скопировать записи с использованием SQL. Вы можете просто выбрать необходимые данные и вставить их непосредственно в новую таблицу (хотя синтаксис, вероятно, зависит от СУБД, что может быть проблемой для вас).

В стандартном SQL вы можете сделать это следующим образом

INSERT INTO new_table (
    column1, 
    column2, 
    column3
)
SELECT
    column1 as "Copied value for new entity",
    'a default' as "Default value for new entity",
    some_column * 3 as "Computed Value for new entity"
FROM 
    new_table;

Выбор псевдонимов столбцов, конечно, не является обязательным, я просто использовал их в качестве комментариев для различных вещей, которые вы можете сделать.

Конечно, если у вас более сложная структура таблицы, которую вы хотите сгладить, вы можете выполнить запрос любой сложности, если он возвращает набор строк, которые вы хотите вставить.

1 голос
/ 24 мая 2010

Нужно ли создавать новый класс сущностей или можно преобразовать данные, используя существующий?

Вы не можете отобразить сущность на две таблицы (здесь я не говорю о стратегии наследования JOIN), поэтому вам придется создать новую сущность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...