我有多个这样设置的父子实体。
public class Brigade {
// Ids
@OneToMany(mappedBy = "brigade", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonManagedReference
private List<Battalion> battalionList;
// other columns
}
public class Battalion {
// Ids
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "BRIGADE_ID")
@JsonBackReference
private Brigade brigade;
@OneToMany(mappedBy = "battalion", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonManagedReference
private List<Company> companyList;
// other columns
}
public class Company {
// Ids
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "BATTALION_ID")
@JsonBackReference
private Battalion battalion;
// other columns
}
在前端,我有一个页面来显示一个营表,供用户选择以查看详细信息。该页面依赖于RESTful API,并按此设置了存储库和服务类。
public interface BattalionRepository extends JpaRepository<Battalion, Long> { }
public class BattalionService {
@Autowired
private BattalionRepository battRepository;
public List<Battalion> getAllBattalions() {
return List<Battalion> battRepository.findAll();
}
// other stuff
}
我的问题是,JPARepository的.findAll()
方法将不仅返回该营条目的列表,而且还返回该营链接到的上级旅实体,以及每个营包含的所有关联子公司。它使JSON数据膨胀(我不需要表的所有这些详细信息),并且在调试时很难读取,更不用说仅将所有数据转储到客户端的安全性问题了。
如何获取JPARepository以返回 just 目标实体?