@ManyToMany无连接表(遗留数据库) [英] @ManyToMany without join table (legacy database)

查看:168
本文介绍了@ManyToMany无连接表(遗留数据库)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须将遗憾的设计应用于遗留数据库中的JPA。不幸的是不可能改变它。幸运的是只用于只读访问。



我发现的最奇怪的事情之一是没有连接(或中间)表的多对多关系。这是对表结构的简化:

 用户访问
---- ------
ID int主键ID int主键
名称varchar2(20)名称varchar2(20)
ACCESS_GROUP int ACCESS_GROUP int




  • ACCESS_GROUP列可以在两个表中重复

  • 一位用户可以与N ACCESS相关

  • 一个ACCESS可以与N USER

    相关联。概念上这个表必须映射到Java类方式:

      public class User {
    private Integer id;
    私人字符串名称;
    @ManyToMany私人列表< Access> accesslist中;
    }

    public class Access {
    private Integer id;
    私人字符串名称;
    @ManyToMany私人清单<使用者>用户列表;
    }

    但我认为这是不可能的。您认为在JPA中访问此表的最佳方法是什么,并浏览它们?解析方案

您可以尝试映射它作为两个只读的一对多关系:

  public class User {
@Column(name = ACCESS_GROUP)
私人整数组;

@OneToMany
@JoinColumn(name =ACCESS_GROUP,referencedColumnName =ACCESS_GROUP,
insertable = false,updateable = false)
private List< Access> accesslist中;
...


public class Access {
@Column(name =ACCESS_GROUP)
private Integer group;

@OneToMany
@JoinColumn(name =ACCESS_GROUP,referencedColumnName =ACCESS_GROUP,
insertable = false,updateable = false)
private List< User>用户列表;
...
}


I have to apply JPA in a legacy database with an awful design. Unfortunately is not possible to change it. Luckily is only for read-only access.

One of the strangest things I found is a "many-to-many" relationship without a join (or intermediate) table. This is a simplification of the table structure:

USER                      ACCESS
----                      ------
ID int primary key        ID int primary key
NAME varchar2(20)         NAME varchar2(20)
ACCESS_GROUP int          ACCESS_GROUP int

  • ACCESS_GROUP columns can be repeated in both tables
  • One USER can be related to N ACCESS
  • One ACCESS can be related to N USER

"Conceptually" this tables must be mapped with Java classes this way:

public class User {
    private Integer id;
    private String name;
    @ManyToMany private List<Access> accessList;
}

public class Access {
    private Integer id;
    private String name;
    @ManyToMany private List<User> userList;
}

But I think this is not possible. What do you think is the best approach to access this tables in JPA and navigate through them?

解决方案

You can try to map it as two read-only one-to-many relationships:

public class User {
    @Column(name = "ACCESS_GROUP")
    private Integer group;

    @OneToMany
    @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP",
        insertable = false, updateable = false)
    private List<Access> accessList;
    ...
}

public class Access {
    @Column(name = "ACCESS_GROUP")
    private Integer group;

    @OneToMany
    @JoinColumn(name = "ACCESS_GROUP", referencedColumnName = "ACCESS_GROUP",
        insertable = false, updateable = false)
    private List<User> userList;
    ...
}

这篇关于@ManyToMany无连接表(遗留数据库)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆