【发布时间】:2020-05-23 14:43:30
【问题描述】:
我正在使用数据库中的 JPA 实体,并尝试通过 EntityManager 在数据库中创建、修改或删除寄存器。
我有一个“公司”实体,这个实体有一个“员工”实体的集合。
当我修改、创建或删除 Employee 表中的某些寄存器时,不会更新来自 Company 实体的“Employee”集合,只有当我停止并再次运行项目时(我正在使用 glassFish 服务器)
但是,如果我使用 Employee 实体外观使用 findAll() 方法直接打印整个员工列表,则显示的员工是更新的。
代码如下:
public class test extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@EJB
CompanyFacade companyDB;
@EJB
EmployeeFacade employeeDB;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
Company company = companyDB.find("Z-5849729");
//CREATE
if(request.getParameter("create")!=null){
Employee employee = new Employee(3);
employee.setBirthdate("05/06/1998");
employee.setCompanyrfc(company);
employee.setSalary(1600);
employee.setSector("Client Support");
employee.setName("Alfonso Guerrero");
employeeDB.create(employee);
}
//REMOVE
if(request.getParameter("remove")!=null){
Employee employee = employeeDB.find(3);
employeeDB.remove(employee);
}
//EDIT
if (request.getParameter("edit")!=null){
Employee employee = employeeDB.find(3);
employee.setName("Alfonso Modified");
employeeDB.edit(employee);
}
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet test</title>");
out.println("</head>");
out.println("<body>");
out.println(company.getCompanyrfc()+" |" + company.getName());
Address address = company.getZipcode();
List<Employee> employees = (List<Employee>) company.getEmployeeCollection();
for (Employee employee : employees){
System.out.println(employee.getName());
out.println(employee.getName());
}
List<Items> items = ( List<Items>) company.getItemsCollection();
for (Items item : items){
out.println(item.getItemname());
}
List<Employee> employeeList = employeeDB.findAll();
for (Employee employee : employeeList){
out.println("<p>"+employee.getName()+"</p>");
}
out.println(" |" + address.getCountry() + " " + address.getAdminname());
out.println("<h1>Servlet test at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
}
当我使用公司实体中的 company.getEmployeeCollection() 时,我得到了未更新的员工列表。
如果我使用 Employee Entity Facade 中的 employeeDB.findAll(),我会更新员工列表。
【问题讨论】:
-
可能与刷新entitymanager有关。完成上述操作后拨打
entityManager.flush()查看。
标签: jpa