Hibernate 如何使用JPARepository仅返回目标实体
我设置了多个这样的父子实体Hibernate 如何使用JPARepository仅返回目标实体,hibernate,jpa,Hibernate,Jpa,我设置了多个这样的父子实体 public class Brigade { // Ids @OneToMany(mappedBy = "brigade", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JsonManagedReference private List<Battalion> battalionList; // other columns } pu
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
}
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
}
公共级旅{
//身份证
@OneToMany(mappedBy=“battle”,orphanRemoving=true,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JsonManagedReference
私人名单营员;
//其他栏目
}
公营{
//身份证
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“旅号”)
@JsonBackReference
私人旅;
@OneToMany(mappedBy=“battalion”,orphan=true,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JsonManagedReference
私人上市公司名单;
//其他栏目
}
公营公司{
//身份证
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“营号”)
@JsonBackReference
私人营;
//其他栏目
}
在前端,我有一个页面显示一个营表,供用户选择以查看详细信息。此页面依赖于RESTful API,存储库和服务类设置为RESTful API
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
}
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{}
公营军种{
@自动连线
私营营储存库营储存库;
公共列表getAllBattalions(){
返回列表:repository.findAll();
}
//其他东西
}
我的问题是JPARepository的.findAll()
方法不仅会返回营条目列表,还会返回营链接到的父旅实体,以及每个营包含的所有关联子连。它会使JSON数据膨胀(我不需要表中的所有细节),并使调试时难以读取,更不用说将所有数据转储到客户端的安全问题了
如何让JPA position只返回目标实体 通过使用,您可以通过声明自己的接口(表示选择性属性)并编写自己的查询方法来获取选择性属性。当然,有多种编写接口的方法。请看一下文档中共享的示例。通过使用,您可以通过声明自己的表示选择性属性的接口并编写自己的查询方法来获取选择性属性。当然,有多种编写接口的方法。看看文档中共享的示例