如何使用spring数据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;
}

CompanyMaster类:

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();
}

组织服务:

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();
}
}

组织道接口:

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注释会导致无需加载惰性项。所以使用龙目时要小心。

因此,在您的情况下,由于您返回实体本身,在序列化它也序列化子实体时,它导致加载lally子实体。

您需要返回一个只表示父实体的dto,以防止子实体的序列化。若您用getter方法调用child,它会从数据库中lally子实体。

查看更多信息关联:

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/

最新更新