![](/img/trans.png)
[英]How to implement lazy loading using Spring data JPA (JPARepository)?
[英]How to achive lazy loading using spring data jpa?
在我的项目中,我正在使用Spring Data JPA,并为我的数据获取类扩展了JpaRepository接口。
组织硕士班:
@Entity
@Table(name="organization_master")
public class OrganizationMaster {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="organization_id")
private int organizationId;
@OneToMany(mappedBy="organizationMaster")
private List<CompanyMaster> companyMasters;
}
公司硕士班:
Entity
@Table(name="company_master")
public class CompanyMaster {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="company_id")
private int companyId;
@ManyToOne
@JoinColumn(name="organization_id")
private OrganizationMaster organizationMaster;
}
我的控制器
@RequestMapping(value = "/GetOrganization", method = RequestMethod.GET)
public
@ResponseBody
List<OrganizationMaster> getOrganization(){
return organizationService.getOrganization();
}
OrganizationService:
public interface OrganizationService {
List<OrganizationMaster> getOrganization();
}
OrganizationServiceImpl:
@Service
public class OrganizationServiceImpl implements OrganizationService{
@Autowired
private OrganizationDao organizationDao;
@Override
public List<OrganizationMaster> getOrganization() {
return organizationDao.findAll();
}
}
OrganizationDao接口:
public interface OrganizationDao extends JpaRepository<OrganizationMaster,Long> {
}
我的输出响应是: [{“ organizationId”:5,“ companyMasters”:[{“ companyId”:29},{“ companyId”:30}]}]
但是我需要的是 [{“ organizationId”:5}]
当我尝试使用findall()方法从组织母版获取数据时,它也会根据关系从公司母版获取数据。 如何使用Spring数据JpaRepository实现延迟获取( 仅从组织主获取数据 )
所有XToOne关联都是默认的EAGER。 您具有双向关系,因此应在@ManyToOne端使用FetchType.LAZY 。
@ManyToOne(fetch = FetchType.LAZY)
另外,如果在序列化时使用任何序列化器(如json序列化器),它将调用getter方法,这可能会导致不必要地加载惰性项目。
另一个考虑因素是在使用Lombok时,@ Data注释会导致无需加载懒项。 所以在使用龙目岛时要小心。
因此,在您的情况下,由于您返回了实体本身,而在序列化时它也对子项进行了序列化,因此导致加载懒散的子项实体。
您需要返回仅代表您的父实体的dto,以防止子实体的序列化。 如果使用getter方法调用child,则会从数据库中懒散地加载子实体。
查看更多信息关联:
https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/
我相信这个问题已经问过了!您可以使用以下注释:
@OneToMany(fetch = FetchType.LAZY)
请阅读此文章以更好地了解这一点:
https://howtodoinjava.com/hibernate/lazy-loading-in-hibernate/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.