大佬教程收集整理的这篇文章主要介绍了FetchMode如何在Spring Data JPA中工作,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我认为Spring Data忽略了FetchMode。在使用Spring Data时,我总是使用@namedEntityGraph
和@EntityGraph
批注
@Entity
@namedEntityGraph(name = "GroupInfo.detail",
attributeNodes = @namedAttributeNode("members"))
public class GroupInfo {
// default fetch mode is lazy.
@manyToMany
List<GroupMember> members = new ArrayList<GroupMember>();
…
}
@Repository
public interface GroupRepository extends CrudRepository<GroupInfo, String> {
@EntityGraph(value = "GroupInfo.detail", type = EntityGraphType.LOAD)
GroupInfo getByGroupname(String Name);
}
我的项目中确实有三个模型对象之间的关系(文章末尾的模型和存储库片段)。
当我调用PlaceRepository.findById
它时,会触发三个选择查询:
(“ sql”)
SELECT * FROM place p where id = arg
SELECT * FROM user u where u.id = place.user.id
SELECT * FROM city c LEFT OUTER JOIN state s on c.woj_id = s.id where c.id = place.city.id
(对我而言)这是非常不正常的行为。据阅读Hibernate
文档后所知,它应该始终使用JOIN查询。在类中FetchType.LAZY
更改为 查询时(带有附加SELECT
的查询)没有什么区别,在类中更改为 (使用JOIN 查询时)的查询也没有区别。FetchType.EAGERPlaceCityFetchType.LAZYFetchType.EAGER
当我使用CityRepository.findById
抑制射击时,有两个选择:
SELECT * FROM city c where id = arg
SELECT * FROM state s where id = city.state.id
型号定义:
地点:
@Entity
@Table(name = "place")
public class Place extends Identified {
@Fetch(FetchMode.JOIN)
@manyToOne(fetch = FetchType.LAZY)
@Joincolumn(name = "id_user_author")
private User author;
@Fetch(FetchMode.JOIN)
@manyToOne(fetch = FetchType.LAZY)
@Joincolumn(name = "area_city_id")
private City city;
//getters and setters
}
City:
@Entity
@Table(name = "area_city")
public class City extends Identified {
@Fetch(FetchMode.JOIN)
@manyToOne(fetch = FetchType.LAZY)
@Joincolumn(name = "area_woj_id")
private State state;
//getters and setters
}
Repositories:
PlaceRepository
public interface PlaceRepository extends JpaRepository<Place,Long>,PlaceRepositoryCustom {
Place findById(int id);
}
UserRepository:
public interface UserRepository extends JpaRepository<User,Long> {
List<User> findAll();
User findById(int id);
}
CityRepository:
public interface CityRepository extends JpaRepository<City,CityRepositoryCustom {
City findById(int id);
}
以上是大佬教程为你收集整理的FetchMode如何在Spring Data JPA中工作全部内容,希望文章能够帮你解决FetchMode如何在Spring Data JPA中工作所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。