2016-06-15 3 views
0

데이터베이스의 사용자를 보여주는 jsp 웹 페이지를 코딩하려고합니다. 페이지가 정확하게 작동하고 있습니다.JPA 엔티티가 삭제 된 후에도 계속 존재합니다.

예를 들어 페이지의 링크를 클릭하여 데이터베이스에서 사용자를 삭제할 수는 있지만 불행히도 사용자는 페이지가로드 될 때 계속 표시됩니다. 페이지를 다시로드하면 사용자가 사라집니다. JPA 클래스에 @Cacheable(false)을 추가했지만 아무 것도 변경되지 않았습니다. 더 나은 이해 예를 들어 워크 플로

: Usermanagement에

  1. 관리자가 클릭 (호출 "showUserHandler"서블릿)
  2. 페이지는 데이터베이스에서 처음 10 사용자와로드
  3. 관리자에 의해 (사용자 삭제 핸들러 (MVC)/서블릿 호출)
  4. 서블릿은 사용자를 삭제하고 포인트 번호 1에서 showUserHandler를 호출합니다.
  5. 페이지가로드 중이며 10 명의 사용자를 표시하지만 삭제 된 사용자 i 여전히
  6. F5 키를 누르거나 "다시"사용자는 사용자가 같이 제거

을 사라 S :

Users user = em.find(Users.class, request.getParameter("uId")); 
if (user != null) { 
em.getTransaction().begin(); 
em.remove(user); 
em.getTransaction().commit(); 
em.close(); 
} 

그리고 사용자로드 :

EntityManager em = SessionUtil.createManager(); 
List<Users> usersList = em.createNamedQuery("Users.findAllOrdered", Users.class).setParameter("uId", Integer.parseInt(request.getParameter("lastID"))).setFirstResult(0).setMaxResults(10).getResultList(); 

수있는 사람 무슨 일이야 ?

+0

showUserHandler 삭제 및 호출이 이루어지는 3 단계 서블릿의 전체 소스 코드를 공유 할 수 있습니까? –

+1

왜 JPA 공급자의 로그를 살펴 보지 않습니까? 그러면 SQL 호출이 표시되고 데이터 스토어에 있는지 여부를 알 수 있으며 캐시에서 오는지 여부를 확인할 수 있습니다. JPA API 호출에 의존하는 것만으로도 큰 블랙 박스로 취급되고 전혀 디버깅되지 않습니다. –

+0

@SanjeevSaha 소스 코드는 – marian04

답변

0

트랜잭션에서 롤백을 수행 할 때 엔티티를 제거 할 때 코드가 java.lang.IllegalArgumentException: Removing a detached instance이됩니다. 이것은 다른 영속 컨텍스트에서이 엔티티를로드하고 제거하기 때문에 발생합니다.

거래 내에서 find으로 전화를 걸어 보았습니까?

em.getTransaction().begin(); 
Users user = em.find(Users.class, request.getParameter("uId")); 
if (user != null) { 
em.remove(user); 
em.getTransaction().commit(); 
em.close(); 
} 
관련 문제