2012-04-16 2 views
1

누군가 (James Sutherland)가 "모든 JPQL 쿼리 삭제를 실행 중임"이라고 말한 사람이 this link at Nabble 인 것을 보았습니다. 이것은 기본적으로 자신의 SQL을 실행하는 것과 비슷하지만 쿼리를 올바르게 실행해야합니다JPA 2를 사용하는 올바른 접근 방식

JPA에서 객체를 삭제하는 일반적인 방법은 아니지만 JPA에서는 일반적으로 객체를 읽은 다음 remove()를 호출합니다. "

이것이 사실인지 아닌지 궁금합니다. 단순한 테이블 이상을 제거하는 것이 얼마나 어려웠는지에 근거하여 이것이 올바른 것으로 생각하기 시작했습니다.

내 생각은 지금까지 이런 식으로 할 수 있습니다

  1. 는 SELECT 문을 수행하지만 특정가 될 수있다 (예를 들어
    모든 학생을 선택할 경우 학생 과정> 4 마크> = 60
    2011 년과 2012 년 사이에 학생 등록).
  2. 표시/편집/ 개체를 삭제
  3. 린스, 비누 거품 등

에를 사용하는 가정 방법을 하나에 접근으로이 소리 합리적인합니까 (지금의 EntityManager는 /은/유지 제거 병합) JPA 아니면 기지에서 벗어나나요?

+0

예, JPA의 아이디어입니다. 개체를로드하고 수정합니다. –

답변

1

제거 계단식은 여기에서 설명했습니다. Google App Engine - DELETE JPQL Query and Cascading. 또한 일괄 업데이트를 수행하는 경우 낙관적 잠금이 사용되는 경우 버전 열이 업데이트되지 않습니다. 따라서 배치 업데이트/삭제는 JPA에서 약간의 장애가 있습니다.

하지만 말하지 않을 것입니다. 이것은 JPA에서 개체를 삭제하는 일반적인 방법은 아닙니다. 내가 선택한 조건에 따라 2, 20 또는 200 개의 객체를 삭제해야 할 때 각 객체에 remove()을 호출하기 만하면 대부분 나쁜 생각입니다.

모든 배치 업데이트/삭제가 이유 때문에 사양에 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 그래서 나는 삭제/업데이트를 한 후에 구조화 된 쿼리 언어를 사용해야한다고 생각한다. 나에게 이것은 ORM 프레임 워크의 목적을 거의 무용지물로 여긴다. –

+0

@CodesNChaos : 나는 그런 말을하지 않았다! SQL은 많은 이점을 추가하지 않고 JPA QL에서 대량 업데이트/삭제의 모든 단점을 가지고 있습니다 (아마 * 빠름). 내가 말한 것은 대량 객체 업데이트가 순수 객체 지향 JPA 접근법의 의미에 따라 항상 작동하지 않는다는 것입니다. 하지만 SQL은 마찬가지입니다. 추신 : 17 분은 SO에 대한 빠른 응답이 아닙니다 ;-). –

+0

내가 쿼리 언어 (SQL 또는 JPQL 일 것임)의 사용에 대해 질문하는 이유는 프로그래머가 쿼리 언어를 다시 조사하여 계단식 및 외래 키 제약 조건을 추적해야하기 때문입니다. 그렇다면 대량 삭제에 대한 귀하의 요점을 볼 수 있습니다. 삭제 목적으로 전송 된 1,000,000 건의 레코드는 어리석은 일입니다. :) –

관련 문제