java - 如何使用 Hibernate 表示遗留数据库?

标签 java hibernate view legacy-database data-representation

我有以下遗留数据库结构和内容:

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

我想将其表示如下,并利用一个名为“用户”的实体,以便我可以抽象遗留结构的复杂性:

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

我使用数据库中的 View 来执行此操作,但我无法使用此 View 进行更新。有没有办法使用 Hibernate 来表示遗留结构,以便我也可以更新?

最佳答案

您最好的方法可能是标准化表格。从长远来看,这将使事情变得更加容易。您可以尝试的一件事(这不是一个选项)是创建另一个名为 user 的表,该表至少包含一个主键和参数表中用户信息的 id。这将允许您将关系视为一对多并使用 hibernate 进行映射。例如,您可以执行如下操作:

注意我可能有错误的映射,我只是凭空做这个来说明这一点。

@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")},
        inverseJoinColumns=@JoinColumn(name="order"))
    @MapKeyJoinColumn(name="parameter")
    private Map<String,Parameter> userData;

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

    etc.

}

关于java - 如何使用 Hibernate 表示遗留数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16548386/

相关文章:

java - Springframework.dao.InvalidDataAccessResourceUsageException hibernate .SQLGrammarException MySQLSyntaxErrorException

ios - 来自其他类中的类的对象以访问 UIView iOS Objective-c

java android 路径动画

java - 使用 Hibernate 作为 ORM 机制的 Web 应用程序中的 L1 和 L2 缓存有什么区别?

java - 在 Java 应用程序中查找连接泄漏

java - 按姓氏对对象数组进行排序java

java - Swagger 忽略引用模式的模式属性

java - Hibernate 无法以自定义方言注册 MySQL 的 'LIMIT' 函数

android - Android中圆圈内的文字

java - App 的背景音乐应该有自己的主线吗?