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

如何将JPA规范从子实体转换为父实体

虞正业
2023-03-14

我有一个相当大的系统,它的规范是由子实体上的几个方法构建的。所以我有一个用户,他有一个宠物木偶,就像这个问题一样。我的关系是双向的,所以Pet在用户上也有多对一的关系,我正在努力将子实体上的规范转换为应用于父实体。

我查找的大多数问题都显示了如何在不同的实体上应用规范,或者在规范执行后获得不同的实体。这不是我想要的。

我试着写一个这样的方法:

public static Specification<User> extendsPetSpecToUser(
          Specification<Pet> petSpec) {
// ???
  }

但我不知道如何编写它(我尝试过使用Join,但没能“告诉”JPA将Join和规范结合起来,以使用不同的根但类似的约束条件进行查询)

鉴于规范很大,并且还用于其他部分直接查询 Pet,因此从不同的根重写它并不是一个真正的选择。

感谢您的时间,如果这是重复的,我很抱歉,我真的没有看到另一个符合我需要的问题。

共有1个答案

艾意蕴
2023-03-14

首先,感觉这个问题隐藏了您使用的查询的奇怪结构。< br >为什么要构建< code >规范

无论如何,为了实现上述目标,您是否尝试过使用子查询?

public class TransformToUser implements Specification<User> {

  private final Specification<Pet> specification;

  public TransformToUser (Specification<Pet> specification) {
    this.specification = specification;
  }

  @Override
  public Predicate toPredicate(
      Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {

    Subquery<Pet> subqueryPet = criteriaQuery.subquery(Pet.class);
    Root<Pet> fromPet = subqueryDeclaration.from(Pet.class);
    subqueryPet.select(fromPet);
    subqueryPet.where(
        specification.toPredicate(fromPet, criteriaQuery, criteriaBuilder));

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

  • 如何返回与JPA中的父级有关系的实体列表? 我有一个用户实体,在名为的属性上有@OneToMany映射。子实体为Pet类型。这只是一种单向关系。 如何在JPA中编写返回给定用户的所有宠物的连接?

  • 在一个双向关系中,我不能将子外键与父外键相关联。我有一个父类联盟是这样定义的: 子类ServiceCharge是这样定义的: 然后运行测试代码: 正如您所看到的,在将Union u持久化到数据库之后,我将这两个实体与一个控制器相关联,ServiceController.Add只是通过使用Union setter将实体charge1添加到servicecharges列表中,然后将该实体持久化到数据库

  • 我使用Spring数据JPA和Spring Boot应用程序。我有一个属性很少的实体类。假设我有10个属性与实体关联,我只想检索其中的几个(用户名、密码、名字、名字、电子邮件)。 因此,我编写了一个查询,只获取5个字段,但该方法不返回实体对象,而是返回一个普通对象。 如何将查询结果转换为Spring Data JPA中的实体?

  • 我有vehicleId和vehicleName的值,我想从这两个属性值中获取User对象。 我不想创建一个车辆存储库仅仅是为了找到用户对象,我知道可以通过创建一个车辆存储库来实现,它扩展了springdatajpa中的JPA存储库。

  • 表sql:在此处输入图像描述 链接创建和测试SQL:https://www.db-fiddle.com/f/9ihygssmwErvhb4ekcUnG5/5 我没有办法将这个sql转换为Spring(方法:toPredicate(Root root, CriteriaQuery 在java中有实体:产品,属性 SQL: 我尝试过预测方法,但失败了 结果日志: