java - 如何在@Query注释中获取特定城市及其所有相关学校

标签 java spring-data-jpa one-to-many

我有两个域类 City 和 School 以及 OneToMany。

@Entity
public class City {
 ...
 @OneToMany(mappedBy="city")
 private Set<School> schools = new HashSet<>();
 ...
}
@Entity
public class School {
 ...
 @ManyToOne
 private City city;
 ...
}

对应的存储库是:

@Repository
public interface CityRepository extends JpaRepository<City, Long>{
}
@Repository
public interface SchoolRepository extends JpaRepository<School, Long> {
}

在 CityController 的方法中:

@GetMapping(....)
public ResponseEntity<City> getSchool(@PathVariable Long id) {
 City city = cityRepository.findOne(id);
 return ResponseUtil.wrapOrNotFound(Optional.ofNullable(city));
}

当我调试以检查城市对象的学校成员时,出现异常: 无法计算表达式方法抛出“org.hibernate.LazyInitializationException”异常。

不知道为什么,我只想获取该城市的所有学校(但不想在域类中添加一些注释,我更喜欢在@Repository中实现它,更好地使用@Query) 。感谢您的帮助。

最佳答案

在 Hibernate 中,默认情况下所有关系都有 FetchType.LAZY。您需要将其设置为渴望获得城市。

@ManyToOne(fetch = FetchType.EAGER)
private City city;

关于java - 如何在@Query注释中获取特定城市及其所有相关学校,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49614764/

相关文章:

java - QueryDsl 对 Map 字段键的 Web 查询

sql - 比较 2 个列表的 Postgres SQL/HQL 查询结构

java - JPA - 保持一对多关系

Java: Sonar 强制构造函数

java编码问题: hangs on a arraylist add

java - 为什么我的Pascal的三角形Java代码不起作用?

swift - 为什么 Realm "to many"关系总是有相同的引用?

java - Eclipse 看起来像 native GUI 吗?

java - 如何在同一个应用程序中同时使用 Spring JPA 和 Hibernate?

java - 如何将数据传递到外键,在传递数据时我使用 postman 得到空值?