当前位置: 首页 > 知识库问答 >
问题:

Hibernate JPA,连接多个表

哈沛
2023-03-14
 @Entity
 public class A {
      private String name;
      private Int idA;
      ...
 } 

 @Entity
 public class B {
      private String lastName;
      private Int idB;
      ...
 }

 @Entity
 public class C {
      private String name;
      private String lastName;
      ...
 }

我的本机查询将类似于:“select*from a inner join b inner join c on a.ida=b.idb and b.lastname=c.lastname and a.name=c.name”

在hibernate中,如果要连接两个表,可以使用@joincolum,如果要通过表B连接表A和表C,可以使用@joincable。

因此在HQL中查询将看起来像:“from A A inner join A.b as b inner join A.c”,其中

@Entity
public class A {
...
@OneToMany
@JoinColumn(name="idB", referencedColumnName="idA")
private List<B> b;
...

@ManyToMany
@JoinTable(name = "B",
     joinColumns = {@JoinColumn(name="idB", referencedColumnName="ioA")},
     inverseJoinColumns = {@JoinColumn(name="lastName",referencedColumnName="lastName")}
 )
private List<C> c;
...
}

但在这种情况下,我没有从a表直接访问C表的权限,有人能解释一下我是怎么得到的吗

 select * from a inner join b inner join c on a.idA = b.idB and b.lastName = c.lastName and a.name = c.name 

在HQL和JPA中

共有1个答案

漆雕恺
2023-03-14

要让JPA理解DB结构,还需要定义关系。

@Entity
 public class A {
      private String name;
      private Int idA;

      @OneToMany(fetch = FetchType.LAZY, mappedBy = "a")
      private List<B> bs = new ArrayList()<>;
      ...
 } 

 @Entity
 public class B {
      private String lastName;
      private Int idB;

      @ManyToOne
      private A a;

      @OneToMany(fetch = FetchType.LAZY, mappedBy = "b")
      private List<C> cs = new ArrayList()<>;
      ...
 }

 @Entity
 public class C {
      private String name;
      private String lastName;

      @ManyToOne
      private B b;
      ...
 }

然后你就可以做一些简单的事情

A a = yourARepository.findById(1);
List<B> bs = a.getBs();
For(B b : bs){
    List<C> cs = b.getCs();
}

那只是我头顶上的一个抄写员给你一个主意。您可能需要做一些调整。我可以试试,等我回家后再修。:)

 类似资料:
  • 问题内容: 目前,我的连接 mongoose.js 具有以下代码: 需要连接的文件是 test.js : 如何更新mongoose.js以使用mongoose.createConnection(…)函数使用多个连接? 当我进行如下更改时,我仅从一个连接的更改开始: 我得到“未定义不是函数”。如果我使用此代码: 我收到“错误:尝试打开未关闭的连接” 有什么建议吗? 问题答案: mongoose通过

  • 我有一些元素,我想通过JSPlumb社区版将它们连接起来。我在javascript中有以下代码行: 我想做的是在运行时制作两个和一个,并将两个源endpoint连接到目标endpoint,但当我将一个源endpoint连接到目标endpoint时,目标不会接受第二个源endpoint。我该怎么做?

  • 问题内容: 我从来没有做过这样的PHP / MYSQL技巧来加入多表。请具有该领域经验的人员帮助: TICKETS 表中的字段: 表 RECEPTS中的 字段: 表 PAYMENTS中的 字段: 表 CUSTOMERS中的 字段: 表之间的关系很容易理解: 我希望达到的最终结果: 我试图做这样的事情,但在某个地方出错: 问题答案: 您应该可以使用以下方法获得结果: 参见带有演示的SQL Fiddl

  • 问题内容: 我正在尝试使用hibernate条件生成器连接4个表。 下面分别是这些表。 在这4个表中,我想为MySQL执行以下sql脚本: 那么,如何使用Hibernate CriteriaBuilder实现这一目标?请帮助… 预先感谢....... 问题答案: CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQue

  • 问题内容: 我正在尝试创建一个应用程序,该应用程序可以连接并接收来自多个蓝牙低能耗设备的通知。我想知道如何实现这一目标。每个连接是否需要一个单独的线程?考虑到API的异步特性,如何确保能够按发现的顺序发现服务并设置通知。我目前使用的是此处提供的相同结构:https : //developer.android.com/guide/topics/connectivity/bluetooth- le.h

  • 问题内容: 我正在使用标准的join命令来连接基于column1的两个排序文件。命令是简单的连接文件1文件2>输出文件。 但是,如何使用相同的技术加入3个或更多文件?join file1 file2 file3> output_file上面的命令给了我一个空文件。我认为sed可以帮助我,但我不太确定该怎么做? 问题答案: : 它仅适用于 两个 文件。 如果您需要加入三个,也许您可​​以先加入前两个