2013-05-14 2 views
1

Я имею последующую структуру базы данных унаследованной и содержание:Как представить устаревшую базу данных с помощью Hibernate?

order parameter  value 
-------------------------------- 
1  user_login  user 
1  user_password 123456 
1  user_level  basic 
2  user_login  admin 
2  user_password s3k42k 
2  user_level  advanced 

Я хотел бы представить это, как показано ниже, и использовать объект под названием «User», так что я могу абстрагировать сложность унаследованной структуры:

id user password level 
------------------------------- 
1  user 123456 basic 
2  admin s3k42k advanced 

Я получил его, используя представление в базе данных, но я не смог обновить его с помощью этого представления. Есть ли способ представить устаревшую структуру, используя Hibernate, чтобы я мог обновить тоже?

+1

Я не думаю, что Hibernate может это сделать. Вероятно, в конечном итоге было бы легче сделать противоположное; нормализовать таблицу и создать представление, которое реплицирует представление значения ключа для устаревшего кода. – Zutty

ответ

1

Ваш лучший подход, вероятно, состоит в нормализации таблицы. В долгосрочной перспективе это упростит ситуацию. Одна вещь, которую вы могли бы попробовать, это не вариант, это создать другую таблицу с именем пользователя, которая содержит по крайней мере первичный ключ и идентификатор информации о пользователях в таблице параметров. Это позволит вам рассматривать отношения как «один ко многим» и отображать их с помощью спящего режима. Например, вы можете сделать что-то вроде следующего:

Примечание Возможно, у меня неправильное отображение. Я просто сделал это с головы, чтобы проиллюстрировать эту точку.

@Entity 
class Parameter{ 

    @Column(name="order") 
    private int order; 

    @column(name="parameter") 
    private String parameter; 

    @column(name="value") 
    private String value; 

} 

@Entity 
class User{ 

    @column(name="id") 
    private int id; 

    @OneToMany(cascade=ALL) 
    @JoinTable(name="SECONDARY", 
     joinColumns={@JoinColumn(name="id")}, 
     [email protected](name="order")) 
    @MapKeyJoinColumn(name="parameter") 
    private Map<String,Parameter> userData; 

    public String getUserName(){ 
     return userdata.get("user_login") 
    } 

    etc. 

} 
+0

Это полезно, но я могу обновить устаревшую таблицу через объект User? – dellasavia

+1

Установка типа каскада для всех должна делать это с сохранением, объединением и удалением. Просто сохраните все через объект пользователя (и проверьте его, чтобы убедиться). Было бы гораздо более эффективно с течением времени, хотя для нормализации таблицы, если это вариант. –