1
Google 클라우드 SQL에서 JPA를 사용하여이 역할 객체를 유지하려고합니다. 하지만 기본 키 위반 예외를 잡아 내고 사용자에게 적절한 메시지를 표시하는 방법을 모르겠습니다.java.sql.SQLException : 'PRIMARY'키에 중복 항목 'sd'가 있습니다.
코드
EntityManager em = EMF.get().createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(r);
tx.commit();
이 내 전체 서블릿 코드의이 부분에 형식화하는의 시도 및 캐치의 도움이 필요합니다.
package com.example.rolessample;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class persist_role_servlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
String role_id = req.getParameter("role_id");
String role_name = req.getParameter("role_name");
String role_desc = req.getParameter("role_desc");
String comp_id = "";
String parent_comp = "";
String permission = "";
role r = new role();
r.setRole_id(role_id);
r.setRole_name(role_name);
r.setRole_desc(role_desc);
//Persisting the role bean .
EntityManager em = EMF.get().createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(r);
tx.commit();
String[] checkboxNamesList = req.getParameterValues("component");
for (int i = 0; i < checkboxNamesList.length; i++) {
String[] myCheckBoxValue = req
.getParameterValues(checkboxNamesList[i]);
//If null, it means checkbox is not in request, so unchecked
if (myCheckBoxValue == null) {
component comp = new component();
//Logic for finding component's name,component parent and their permissions.
String S1 = checkboxNamesList[i];
int lastUnderscore = S1.lastIndexOf("_");
permission = S1.substring(lastUnderscore + 1);
comp_id = S1.substring(0, lastUnderscore);
lastUnderscore = comp_id.lastIndexOf("_");
parent_comp = comp_id.substring(0, lastUnderscore);
comp.setComp_id(comp_id);
comp.setParent_comp(parent_comp);
comp.setRole_id(role_id);
comp.setPermission(permission);
//Persisting component bean .
tx.begin();
em.persist(comp);
tx.commit();
}
// if is there, it means checkbox checked
else {
out.println(checkboxNamesList[i] + "=checked");
}
}
// resp.setHeader("Refresh", "0; url=/guestbook.jsp");
}
}
미리 감사드립니다. 당신은 JPA를 사용하고 있기 때문에