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

使用JPA join从父实体返回子实体

陆安国
2023-03-14

如何返回与JPA中的父级有关系的实体列表?

我有一个用户实体,在名为pets的属性上有@OneToMany映射。子实体为Pet类型。这只是一种单向关系。

如何在JPA中编写返回给定用户的所有宠物的连接?

共有1个答案

孙风畔
2023-03-14

所以你有几个选择。

可以使用以下注释:

@ManyToOne
@JoinColumn

这就是你使用它的方式。

public class User
{
   // your standard fields / columns in database

   @OneToMany  (Fetch can be of eager/ lazy)
   @JoinColumn (name="column to join on", referencedColumnName="column to join on in parent class")
   private List<Pet> pets;
}


public Class Pet
{
   //data fields
}

实际上,当你查询用户对象时,宠物列表会被填充。

使用JPA查询数据库。

所以我猜你的用户会有某种id,而宠物表会有某种ID给链接的用户。

所以我们要做以下几点

Select * from user  where user_id = ?;

这将基本上为您提供用户对象

Select * from pet where owner_user_id = ?

这将基本上为您提供属于该用户的所有宠物。

然后您可以自己填充对象。

我不是100%确定你的桌子是什么样子的,但我希望从我的角度来尝试一下。

 类似资料:
  • 是否可以在超类实体中有一个列定义供子类实体使用? 我采用了每子类表层次结构来表示从“超级业务”继承的不同类型的“业务”。因此,每个业务类型在数据库中都有自己的表,并且还有一个通用的“业务”表,其中包含所有业务类型共有的信息。 每个企业都有一个外键列,名为“parent\u id”,它指向相同类型的另一个企业(因此企业可以属于相同类型的其他企业)。这意味着我的每个业务类型类都有自己的“parent”

  • 我在想有没有更好的办法。我想要的是在抽象类中有一个具体的方法,返回扩展抽象类的具体实例。 我认为我不应该把它转换成T,因为它总是T的一个实例。

  • 声明我应该能够使用中选择s.message来查询实体,这确实适用于控制台。 然而,我真正想做的是在返回列表中只返回实体的特定属性,就像这样: 不过,这会出错,根本没有真正的错误消息。我可以看到Hibernate运行了这个查询: 的传统方法工作正常:

  • 我可能需要一些帮助,因为我被这些文件弄糊涂了: 我有一个JPA母公司: 和孩子: 如果我只是增加联系人,我希望JPA能够建立这种关系。 e、 g: 现在发生的是: 触点插入DB(良好) 使用providerX。联系人中的id。提供者列(良好) provider\u contact表中未显示任何关系条目 我知道我可以将联系人设置为提供者的属性<代码>providerX。联系人。添加(c)。。。回购。

  • 我有一个相当大的系统,它的规范是由子实体上的几个方法构建的。所以我有一个用户,他有一个宠物木偶,就像这个问题一样。我的关系是双向的,所以Pet在用户上也有多对一的关系,我正在努力将子实体上的规范转换为应用于父实体。 我查找的大多数问题都显示了如何在不同的实体上应用规范,或者在规范执行后获得不同的实体。这不是我想要的。 我试着写一个这样的方法: 但我不知道如何编写它(我尝试过使用Join,但没能“告

  • 删除父实体时,我还想删除关联的子实体(从数据库中)。我试图在删除时使用级联,如下所示,但我一定做错了什么。 当对父实体对象调用删除时,我收到错误消息:“该实体仍在数据库的其他地方引用”。我可以确认该实体在数据库的其他地方引用的唯一地方是在下面的两个表中(如果我手动从数据库中删除子行,对父实体对象的删除调用工作正常)。在过去的9个小时里,我一直在阅读实体对象并尝试不同的东西。我做错了什么? 这是我的