2012-12-19 1 views
0

예를 들어 소유자가 현재 로그인 한 내 데이터베이스에서 레코드 5 개를 제거하려는 경우와 같이 한 사용자와 관련된 모든 레코드를 제거하려면 어떻게합니까? 다음은 내 코드입니다 :이 같은사용자 이름 별 레코드 삭제 DAO/최대 절전 모드

public void deleteOrders() { 

    Authentication auth = SecurityContextHolder.getContext() 
      .getAuthentication(); 
    String user = auth.getName(); // get logged in username 
    getHibernateTemplate().delete(
      "FROM " + Orders.class.getName() + " WHERE username='" + user 
        + "'"); 
} 

임하려고 뭔가하지만 실패하고 난에 이동할 수 없습니다. 그것을 올바르게하는 방법? 아마 class.getName() 패키지 경로를 포함하지만, 클래스 이름은 테이블 이름과 같은 경우, getSimpleName()가 작동 할 수 있기 때문에, 작동하지 않을 것

+0

실패한 경우 작동하도록하십시오. 몇 가지 세부 사항으로 말할 수있는 유일한 방법은 연결 대신 매개 변수화 된 쿼리를 사용해야한다는 것입니다. 적어도 우리에게 엔티티의 코드와 예외의 전체 스택 추적을 보여줍니다. –

답변

3

HibernateTemplate.delete()는 인수로 삭제 엔티티 인스턴스를합니다. HQL 쿼리를 사용하지 않습니다.

bulkUpdate()을 사용하여 삭제 쿼리를 실행하십시오. 아니면, 더 이상 사용되지 않는 HibernateTemplate을 잊어 버리고 Hibernate API를 직접 사용하십시오.

+0

팁 주셔서 감사합니다. 그것은 작동합니다. – takeit

0

음 : 그러나

"FROM " + Orders.class.getSimpleName() + " WHERE ..." 

, 나는 기울어 될 것이다 같은 것을 할 :

entityManager.createNativeQuery("delete from orders where ...").execute(); 
+0

HQL 쿼리 AFAIK에 엔티티의 완전한 이름을 넣을 수 있습니다. –

+0

@JBNizet thx - 깨닫지 못했습니다. – Bohemian

관련 문제