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

JPA中的后续查询执行

马欣德
2023-03-14

假设spring boot中有一个名为Person的类,其结构如下

@Entity
class Person {
    Long id;
    String name;
    @OneToMany
    Set<PhoneNumber> phoneNumbers;
}

人由一组电话号码组成。

@Entity
class PhoneNumber {
    Long id;
    @ManyToOne
    @JoinByColumn("person_id")
    Person person;
    String category;
    String mobileNumber;
    String phoneNumber;
}

PhoneNumber是一个由上述字段组成的类,其中类别表示mobilephone等。

class PersonRepository extends JPARepository<Person, Long> {
     Person findById(Long id);
}

因此,每当我想要获取带有一些idPerson详细信息时,我都会调用上面的方法findById,然后它应该获取Person详细信息,以及电话号码,其类别手机

方法应该是每当它在内部执行findById方法的查询时,它应该执行后续的查询来获取类别为mobilePhoneNumber。我有没有办法得到上面提到的,或者有没有其他方法来实现它?请让我知道。

PS:如果在我的提问方式中有任何问题或错误,请在下面进行评论。这对我有帮助。

共有2个答案

姬宝
2023-03-14

你可以试试这个方法-

// method in Person entity class
public static List<Person> findByIdMobile(long id, String category) {
  return find("id = ?1 and  phoneNumbers.category = ?2", id, category).list();
}

// can use this as
List<Person> mobilePersons = Person.findByIdMobile(1234,"mobile");
宗涵蓄
2023-03-14

你可以得到它。请参阅:

回购协议

class PersonRepository extends JPARepository<Person, Long>,JpaSpecificationExecutor<Post> {
     Person findById(Long id);
}
    public static Specification<Person> search(Long id) {
        return ((root, criteriaQuery, criteriaBuilder) -> {
            criteriaQuery.distinct(true);
            return criteriaBuilder.and(
                    criteriaBuilder.equal(root.get("id"), id),
                    criteriaBuilder.equal(root.join("phone_number").get("category"), "mobile")
           );
        });
    }
personRepo.findAll(search(10));
 类似资料:
  • 我有以下疑问。我想知道为什么在使用JPA和Hibernate时,在ManyToOne或OneToMany关系中执行热切加载时,它会调用DB以获取实体信息,但另外,还会生成后续查询以获取每个子级。 另一方面,当使用带有JOIN FETCH的查询时,它会像我所期望的那样执行查询,同时获取所有信息,因为fetchType被表示为“Eager”。 这里是一个简单的例子: 我有一个和班级教室有很多关系的班级

  • 我有两个表,一个用于聚会,一个用于记分卡模板映射。记分卡模板映射表有一个返回到party(on id)的外键。我想找到一个有记分卡模板映射细节的所有各方的列表。

  • 所以myTable有一个列,我需要从中获取最大id并在查询中使用它。 最后一行给了我一个错误: 运行查询时出错:在EntityManager中创建查询时出现异常:< br > Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:异常描述:语法错误解析[上面的查询]。[214,214]必须为范围变量声明提供标识变量。

  • 问题内容: 我有带有库的IntelliJ项目:Hibernate-entitymanager 4.3.4和JPA 2.0-2.0。使用postgresql-9.3.1100.jdbc4连接到数据库。如何解决? jpa-ql>从ItemEntity中选择ItemEntity.name; 问题答案: 只需阅读文档: http://docs.oracle.com/javaee/7/api/javax/p

  • 问题内容: 我有一个带有库的IntelliJ项目:Hibernate-entitymanager 4.3.4和JPA 2.0-2.0。使用postgresql-9.3.1100.jdbc4连接到数据库。如何解决? jpa-ql>从ItemEntity中选择ItemEntity.name; 问题答案: 只需阅读文档: http://docs.oracle.com/javaee/7/api/javax

  • 该项目有JPA的Spring Boot。我们有一辆有100万条记录的台式车。表具有索引字段类型。 我们有一个用例,我们希望按类型获取所有记录。对于每种类型,我们都会得到所有的车辆记录,然后是下一种类型,然后是下一种,依此类推。 由于有100万条记录,我们将获取每种类型的记录,批量大小为1000。我们还应用了一个类型为column的过滤器。 汽车仓库。JAVA 车辆服务。JAVA 为了理解,假设有5