Spring mvc Spring MVC+;Spring数据JPA父项更新时,子项被删除
当我在控制台中运行应用程序时,结果是正确的。父项正在更新,子项未删除 app.javaSpring mvc Spring MVC+;Spring数据JPA父项更新时,子项被删除,spring-mvc,spring-data-jpa,Spring Mvc,Spring Data Jpa,当我在控制台中运行应用程序时,结果是正确的。父项正在更新,子项未删除 app.java public class app { public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:app-context-annotation.xml");
public class app {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:app-context-annotation.xml");
ctx.refresh();
ClientService clientService = ctx.getBean("jpaClientService", ClientService.class);
UserService userService = ctx.getBean("jpaUserService", UserService.class);
CustomerService customerService = ctx.getBean("jpaCustomerService", CustomerService.class);
TroubleService troubleService = ctx.getBean("jpaTroubleService", TroubleService.class);
Client newClient = clientService.findOne(8l);
String newClientName = "IP 8";
newClient.setClient(newClientName);
clientService.saveClient(newClient);
clientList("Find all:", clientService.findAll());
System.out.println(client.getUserList());*/
}
private static void clientList (String message, List<Client> clientList) {
System.out.println(message);
for (Client client : clientList) {
System.out.println(client);
}
}
private static void userList (String message, List<User> userList) {
System.out.println(message);
for (User user : userList) {
System.out.println(user);
}
}
private static void troubleList (String message, List<Trouble> troubleList) {
System.out.println(message);
for (Trouble trouble : troubleList) {
System.out.println(trouble);
}
}
}
公共类应用程序{
公共静态void main(字符串[]args){
GenericXmlApplicationContext ctx=新的GenericXmlApplicationContext();
load(“classpath:app context annotation.xml”);
ctx.refresh();
ClientService ClientService=ctx.getBean(“jpaClientService”,ClientService.class);
UserService UserService=ctx.getBean(“jpaUserService”,UserService.class);
CustomerService CustomerService=ctx.getBean(“jpaCustomerService”,CustomerService.class);
TroubleService TroubleService=ctx.getBean(“jpatRubleService”,TroubleService.class);
Client newClient=clientService.findOne(8l);
字符串newClientName=“IP 8”;
setClient(newClientName);
clientService.saveClient(newClient);
clientList(“全部查找:,clientService.findAll());
System.out.println(client.getUserList())*/
}
私有静态void clientList(字符串消息,列表clientList){
System.out.println(消息);
用于(客户端:客户端列表){
System.out.println(客户端);
}
}
私有静态void userList(字符串消息,List userList){
System.out.println(消息);
for(用户:userList){
System.out.println(用户);
}
}
私有静态void troubleList(字符串消息,列表troubleList){
System.out.println(消息);
用于(故障:故障列表){
系统输出打印(故障);
}
}
}
但是,当我使用MVC时,当父对象更新所有子对象时,所有表中的子对象都被删除了
edit.jspx
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:spring="http://www.springframework.org/tags"
xmlns:form="http://www.springframework.org/tags/form"
xmlns="http://www.w3.org/1999/xhtml" version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<spring:message code="label_client_info" var="labelClientInfo"/>
<spring:message code="label_client_client" var="labelClient"/>
<spring:message code="label_client_id" var="labelId"/>
<spring:message code="label_client_inn" var="labelInn"/>
<spring:message code="label_client_specific" var="labelClientSpecific"/>
<spring:message code="label_client_address" var="labelClientAddress"/>
<spring:message code="label_client_phone" var="labelClientPhone"/>
<spring:message code="label_client_update" var="labelClientUpdate"/>
<spring:message code="label_client_new" var="labelClientNew"/>
<spring:eval expression="client.id == null ? labelClientNew:labelClientUpdate" var="formTitle"/>
<html>
<head><title>${formTitle}</title></head>
<body>
<h1>${formTitle}</h1>
<div id="contactUpdate">
<form:form modelAttribute="client" id="clientUpdateForm" method="post">
<c:if test="${not empty message}">
<div id="message" class="${message.type}">"${message.message}"</div>
</c:if>
<form:label path="client">
${labelClient}
</form:label>
<form:input path="client"/>
<div>
<form:errors path="client" cssClass="error"/>
</div>
<form:label path="inn">
${labelInn}
</form:label>
<form:input path="inn"/>
<div>
<form:errors path="inn" cssClass="error"/>
</div>
<form:label path="address">
${labelClientAddress}
</form:label>
<form:input path="address"/>
<div>
<form:errors path="address" cssClass="error"/>
</div>
<form:label path="phone">
${labelClientPhone}
</form:label>
<form:input path="phone"/>
<div>
<form:errors path="phone" cssClass="error"/>
</div>
<form:label path="clientSpecific">
${labelClientSpecific}
</form:label>
<form:select path="clientSpecific">
<form:options items="${clientSpecific}"/>
</form:select>
<form:hidden path="version"/>
<br/>
<button type="submit">Save</button>
<button type="reset">Reset</button>
</form:form>
</div>
</body>
</html>
</jsp:root>
${formTitle}
${formTitle}
“${message.message}”
${labelClient}
${labelin}
${labelClientAddress}
${labelClientPhone}
${labelClientSpecific}
拯救
重置
ClientController
@RequestMapping("/clients")
@Controller
public class ClientController {
private Log log = LogFactory.getLog(ClientController.class);
private ClientService clientService;
private MessageSource messageSource;
@RequestMapping(method = RequestMethod.GET)
public String list (Model uiModel) {
log.info("Listing clients");
List<Client> clients = clientService.findAll();
uiModel.addAttribute("clients", clients);
log.info("No. of Clients: " + clients.size());
for (Client client : clients) {
System.out.println(client);
}
return "clients/list";
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String show(@PathVariable("id") Long id, Model uiModel){
Client client = clientService.findOne(id);
uiModel.addAttribute("client", client);
uiModel.addAttribute("users", client.getUserList());
return "clients/show";
}
@RequestMapping(value = "/{id}", params = "form", method = RequestMethod.POST)
public String update(Client client, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest, RedirectAttributes redirectAttributes, Locale locale){
log.info("Updating client:");
if(bindingResult.hasErrors()){
uiModel.addAttribute("message", new Message("error", messageSource.getMessage("client_save_fail", new Object[]{}, locale)));
uiModel.addAttribute("client", client);
return "clients/update";
}
uiModel.asMap().clear();
redirectAttributes.addFlashAttribute("message", new Message("success", messageSource.getMessage("client_save_success", new Object[]{}, locale)));
clientService.saveClient(client);
return "redirect:/clients/"+ UrlUtil.encodeUrlPathSegment(client.getId().toString(), httpServletRequest);
}
@RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET)
public String updateForm(@PathVariable("id") Long id, Model uiModel){
uiModel.addAttribute("client", clientService.findOne(id));
return "clients/update";
}
@RequestMapping(params = "form", method = RequestMethod.POST)
public String create(Client client, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest, RedirectAttributes redirectAttributes, Locale locale){
log.info("Creating Client:");
if(bindingResult.hasErrors()){
uiModel.addAttribute("message", new Message("error", messageSource.getMessage("client_create_fail", new Object[]{}, locale)));
uiModel.addAttribute("client", client);
}
uiModel.asMap().clear();
redirectAttributes.addFlashAttribute("message", new Message("success", messageSource.getMessage("client_create_success", new Object[]{}, locale)));
clientService.saveClient(client);
log.info("Client ID: " + client.getId() + "was created success");
return "redirect:/clients/" + UrlUtil.encodeUrlPathSegment(client.getId().toString(), httpServletRequest);
}
@RequestMapping(params = "form", method = RequestMethod.GET)
public String createForm(Model uiModel){
Client client = new Client();
uiModel.addAttribute(client);
return "clients/create";
}
@Autowired
public void setClientService(@Qualifier("jpaClientService") ClientService clientService){
this.clientService = clientService;
}
@Autowired
public void setMessageSource(MessageSource messageSource){
this.messageSource = messageSource;
}
}
@RequestMapping(“/clients”)
@控制器
公共类客户端控制器{
私有日志Log=LogFactory.getLog(ClientController.class);
私人客户服务;
私有消息源;
@RequestMapping(method=RequestMethod.GET)
公共字符串列表(模型uiModel){
log.info(“上市客户”);
List clients=clientService.findAll();
uiModel.addAttribute(“客户机”,客户机);
log.info(“客户端数量:+Clients.size());
用于(客户端:客户端){
System.out.println(客户端);
}
返回“客户/列表”;
}
@RequestMapping(value=“/{id}”,method=RequestMethod.GET)
公共字符串显示(@PathVariable(“id”)长id,模型uiModel){
Client=clientService.findOne(id);
uiModel.addAttribute(“客户机”,客户机);
uiModel.addAttribute(“users”,client.getUserList());
返回“客户/展会”;
}
@RequestMapping(value=“/{id}”,params=“form”,method=RequestMethod.POST)
公共字符串更新(客户端、BindingResult BindingResult、模型uiModel、HttpServletRequest HttpServletRequest、重定向属性、区域设置){
log.info(“更新客户端:”);
if(bindingResult.hasErrors()){
uiModel.addAttribute(“message”,新消息(“error”,messageSource.getMessage(“client_save_fail”,new Object[]{},locale));
uiModel.addAttribute(“客户机”,客户机);
返回“客户端/更新”;
}
uiModel.asMap().clear();
redirectAttributes.addFlashAttribute(“message”,新消息(“success”,messageSource.getMessage(“client_save_success”,new Object[]{},locale));
clientService.saveClient(客户端);
返回“重定向:/clients/”+UrlUtil.encodeUrlPathSegment(client.getId().toString(),httpServletRequest);
}
@RequestMapping(value=“/{id}”,params=“form”,method=RequestMethod.GET)
公共字符串updateForm(@PathVariable(“id”)长id,模型uiModel){
uiModel.addAttribute(“客户端”,clientService.findOne(id));
返回“客户端/更新”;
}
@RequestMapping(params=“form”,method=RequestMethod.POST)
创建公共字符串(客户端、BindingResult BindingResult、模型uiModel、HttpServletRequest HttpServletRequest、重定向属性、区域设置){
log.info(“创建客户端:”);
if(bindingResult.hasErrors()){
uiModel.addAttribute(“message”,新消息(“error”,messageSource.getMessage(“client_create_fail”,new Object[]{},locale));
uiModel.addAttribute(“客户机”,客户机);
}
uiModel.asMap().clear();
redirectAttributes.addFlashAttribute(“message”,新消息(“success”,messageSource.getMessage(“client_create_success”,new Object[]{},locale));
clientService.saveClient(客户端);
log.info(“客户端ID:+Client.getId()+”创建成功”);
返回“重定向:/clients/”+UrlUtil.encodeUrlPathSegment(client.getId().toString(),httpServletRequest);
}
@RequestMapping(params=“form”,method=RequestMethod.GET)
公共字符串createForm(模型uiModel){
客户端=新客户端