Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用复杂关联表连接JPA实体,而不创建关联实体?_Java_Sql Server_Hibernate - Fatal编程技术网

Java 使用复杂关联表连接JPA实体,而不创建关联实体?

Java 使用复杂关联表连接JPA实体,而不创建关联实体?,java,sql-server,hibernate,Java,Sql Server,Hibernate,我试图使用一个不太简单的关联表在两个JPA实体之间进行多个连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable) 数据库模式 表a -ID(主键) -名字 表b -ID(主键) -名字 表格映射 -ID(主键) -父对象ID(FK)-->TableMapping.ID -A_ID(FK)-->表A.ID -B_ID(FK)-->表B.ID 例子 表 身份证名称 ----------------------- A1代数 A2数据结构 A3经济学

我试图使用一个不太简单的关联表在两个JPA实体之间进行多个连接。我想知道是否有一种方法可以在不创建关联表实体的情况下实现这一点(类似于使用@JoinTable)

数据库模式 表a
-ID(主键)
-名字

表b
-ID(主键)
-名字

表格映射
-ID(主键)
-父对象ID(FK)-->TableMapping.ID
-A_ID(FK)-->表A.ID
-B_ID(FK)-->表B.ID

例子 表 身份证名称 ----------------------- A1代数 A2数据结构 A3经济学 表B 身份证名称 ------------------------ B1初学者 B2高级 表映射 ID父项\u ID A\u ID B\u ID ---------------------------------- 1空B1 2空B2 3 1 A1空 4 2 A2空 5 2 A3空 映射以我上面描述的方式存储,原因我不知道,也无法更改。很多地方都在这样使用它,我必须按照它的方式工作。从本质上讲,TableMapping中的数据可以简化为这样的内容

A_ID B_ID ------------- A1 B1 A2 B2 A3 B2 A_ID B_ID ------------- A1 B1 A2 B2 A3 B2 根据我对问题的理解,有两种方法:

  • 创建关联表的一个实体,并将这两个实体映射到关联表实体。这应该是可行的,但如果我可以做@JoinTable之类的事情,而不必为此关联表创建实体,那就太好了,因为它所做的只是将表A中的实体映射到表B中的实体
  • 创建一个视图,将两个表之间的关联简化为每个映射的单个数据库行,如上图所示。使用@JoinTable中的视图
  • 注意:为了保持代码简单,我没有创建任何getter/setter或构造函数

    实体代码
    @实体
    @表(name=“TableA”)
    公共类实体{
    @身份证
    @列(name=“ID”)
    公共int id;
    @列(name=“name”)
    公共字符串名称;
    }
    @实体
    @表(name=“TableB”)
    公共类实体B{
    @身份证
    @列(name=“ID”)
    公共int id;
    @列(name=“name”)
    公共字符串名称;
    //要添加以下映射吗
    //@manytomy
    //@可接合或等效??
    //公共集实体集;
    }
    

    我不知道是否有办法使用这个奇怪的映射表连接两个实体,而不创建实体或视图。有什么方法可以做到这一点吗?

    您应该首先学习数据库规范化。你应该选择一个而不是许多<代码>提示:您可以通过在两个表之间添加另一个表来完成此操作

    此外,为使用OneToMany而创建的对象必须是列表或集合。

    如果你的问题是,是否可以避免创建某种关联实体,我相信答案是否定的。毕竟,它需要一个持久化的地方。

    是有道理的。我试图找到一种避免持久关联的方法的唯一原因是,我永远不会向数据库写入任何内容,而只是从中读取。所有的实体都是只读的,我在两个实体之间有一个映射表(在我的例子中是TableMapping)。这是一个现有的数据库设计,我必须按照它的方式工作。因为我只想从这个数据库中读取数据,所以我正在寻找一种不必为关联表创建实体的方法。我有另一个例子,两个实体通过映射表连接,但它要简单得多,我能够在@JoinTable的帮助下映射这两个实体,而无需创建映射表实体。同样,只读取这两个实体,不担心写入。 A_ID B_ID ------------- A1 B1 A2 B2 A3 B2