@entitygraph使用案例与效果
时间: 2024-02-29 21:51:35 浏览: 16
@NamedEntityGraph通常与@NamedAttributeNode一起使用,用于指定需要加载的关联实体类和属性。下面是一个@NamedEntityGraph的使用案例:
```java
@Entity
@NamedEntityGraph(name = "person.all", attributeNodes = {
@NamedAttributeNode("address"),
@NamedAttributeNode("hobbies")
})
public class Person {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "person")
private List<Hobby> hobbies;
@ManyToOne(fetch = FetchType.LAZY)
private Address address;
// getters and setters
}
```
在上面的代码中,@NamedEntityGraph定义了一个名为"person.all"的实体图,用于指定加载Person实体类时需要加载的关联类Address和属性hobbies。接下来,我们可以在查询时指定该实体图,来实现关联实体类和属性的抓取:
```java
@EntityGraph(value = "person.all", type = EntityGraph.EntityGraphType.FETCH)
@Query("SELECT p FROM Person p")
List<Person> findAllWithAddressAndHobbies();
```
在上面的代码中,我们在查询语句中使用@EntityGraph注解指定需要加载的实体图,这样在查询Person实体类时,会同时加载Address和Hobby实体类,避免了N+1查询的问题,提高了查询效率。
需要注意的是,@NamedEntityGraph只有在实体类被作为查询结果返回时才会生效。如果只是普通的查询,即使在实体类上添加了@NamedEntityGraph注解也不会生效。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)