spring jpa如何进行多表查询

最近做的一个需求,前端传入一个对象,里面的字段涉及两个表的字段,后台需要相应进行插入到数据库的表中,如下,前端传入的数据

formObj:{
phone:'',
id:0,
projectName:'',//项目名称
matchType:'创新组',// 参赛组别 创新组 创业组
matchArea:'华南赛区',// 参赛赛区
industryField:'',// 行业领域
patentAmount:'',// 专利数
brandAmount:'',// 商标数
copyrightAmount:'',// 版权数
isTransfram:0,// 是否有产学研合作/成果转化意向 1:是 0:否
registDate:'',// 企业注册时间
isHighTech:0,// 是否高新企业(培育)/小巨人企业 1:是 0:否F
isHaveBonus:0,// 是否获得投资资金 1:是 0:否
isNeedFinance:0,// 是否需要融资 1:是 0:否
takePartDesc:'',// 参评人简介
projectProfile:'',// 项目概要
businessPlan:'',// 商业计划书:附件形式
otherMaterials:'',// 其他证明材料:附件形式
projectSort:'第六届',// 第几届
userName:'',//项目负责人
status:0, //状态 1:报名 2:草稿
msg:'',
attch:'',
awardCaseList:[],
applyUserList:[],//项目报名人
},

其中awardCaseList:[],applyUserList:[]传入的数据需要保存其他两张表中。后台的代码如下

@RequestMapping(value = "/apply", method = RequestMethod.POST)
@ResponseBody
public CommonRespon apply(@RequestBody ApplyProjectBean applyProject, HttpServletRequest request) {
CommonRespon respon = new CommonRespon();
ApplyProject project = ApplyProjectBean.setApplyProject(applyProject);
try {
ShiroUser shiroUser = getCurrentUser();
if (shiroUser == null) {
respon.setMsg(Const.CODE_NO_LOGIN_STR);
respon.setCode(Const.CODE_NO_LOGIN);
return respon;
}
if (applyProject.getId() == null || applyProject.getId() == 0) {
// 不存在该项目
project.setCreateUserId(shiroUser.getId());
project.setCreateTime(new Date());
} else {
// 已经存在该项目
ApplyProject applyOld = goldenService.findApplyProject(applyProject.getId());
project.setCreateUserId(applyOld.getCreateUserId());
project.setCreateTime(applyOld.getCreateTime());
project.setId(applyOld.getId());
// 先删除该项目的相关人
goldenService.delApplyList(applyProject.getId());
// 删除获奖
goldenService.deleteAwardList(applyProject.getId());
}
project.setUpdateTime(new Date());// 更新时间
// 项目报名人
List<ApplyUserBean> applyUserList = applyProject.getApplyUserList();
if (applyUserList != null) {
project.setUserName(applyUserList.get(0).getUserName());//项目负责人
for (ApplyUserBean u : applyUserList) {
if (u.getIsContactMan() == 1) {
project.setPhone(u.getMobilePhone());//联系人号码
}
}
}
// 保存项目
ApplyProject projects = goldenService.save(project);
if (applyUserList != null) {
goldenService.saveApplyList(ApplyProjectBean.setApplyUserList(applyUserList, projects));// 保存项目人
}
// 获奖情况
List<SimpleFieldBean> awards = applyProject.getAwardCaseList();
if (awards != null) {
goldenService.saveAwardList(ApplyProjectBean.setAwardCaseList(awards, projects));
}
respon.setData(project.getId());
respon.setMsg(Const.CODE_SUCCESS_STR);
respon.setCode(Const.CODE_SUCCESS);
} catch (Exception e) {
e.printStackTrace();
respon.setMsg(Const.CODE_ERROR_STR);
respon.setCode(Const.CODE_ERROR);
}
return respon;
}

需要用@RequestBody来注释 ApplyProjectBean applyProject(传入的参数),而ApplyProjectBean 对象如下

private List<SimpleFieldBean> awardCaseList;  
private List<ApplyUserBean> applyUserList;
private String msg;
public List<SimpleFieldBean> getAwardCaseList() {
return awardCaseList;
}

public void setAwardCaseList(List<SimpleFieldBean> awardCaseList) {
this.awardCaseList = awardCaseList;
}

public List<ApplyUserBean> getApplyUserList() {
return applyUserList;
}

public void setApplyUserList(List<ApplyUserBean> applyUserList) {
this.applyUserList = applyUserList;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

SimpleFieldBean,ApplyUserBean这个属性代表相应表中的字段,可能有多条,就用List,这样就相当于把三个表的数据作为一个对象传入,对这个参数进行操作,就可以相应对对应表进行操作。

原文地址:https://www.cnblogs.com/lyfzero/p/7516117.html