假设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
是一个由上述字段组成的类,其中类别表示mobile
或phone
等。
class PersonRepository extends JPARepository<Person, Long> {
Person findById(Long id);
}
因此,每当我想要获取带有一些id
的Person
详细信息时,我都会调用上面的方法findById
,然后它应该获取Person
详细信息,以及电话号码
,其类别
是手机
。
方法应该是每当它在内部执行findById
方法的查询时,它应该执行后续的查询来获取类别为mobile
的PhoneNumber
。我有没有办法得到上面提到的,或者有没有其他方法来实现它?请让我知道。
PS:如果在我的提问方式中有任何问题或错误,请在下面进行评论。这对我有帮助。
你可以试试这个方法-
// 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");
你可以得到它。请参阅:
回购协议:
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