2012-05-04 3 views
1

Hibernate가 Hibernate를 생성하기 위해 Hibernate 또는 필요한 SQL을 생성하는 방법을 알고 싶었던 특정 상황이 있습니다.세션 (데이터베이스없이)없이 SQL 쿼리를 생성하기 위해 Hibernate를 사용하는 단서

개체 그래프를 DB로 업데이트해야하는 상황에서 null (기본값이 아닌) 값이있는 필드 만 업데이트하면됩니다. 나의 유스 케이스는 다음과 같다. 우리는 백 엔드 지원 팀이 특정 제품에 대해 약 25-30 개의 필드를 업데이트 할 수 있도록 일괄 편집 기능을 제공한다. 따라서 제품 ID를 제공하고 열에 대한 값을 업데이트해야합니다.

그러나이 경우에는 최대 절전 모드를 사용하여 DB에서 전체 큰 개체 그래프를 가져온 다음 특정 필드를 업데이트하고 Session.merge를 수행합니다. 아니야. 의 편집이 증가하고 있으며, 이로 인해 CPU 사용률이 증가하고 있으며 이제는 5 배 큰로드에 맞게 재 설계해야합니다.

그래서 우리는 SQL 쿼리를 생성하고 나중에 SQL에서 직접 실행하는 것을 의미한다고하더라도 배치 업데이트를 실행하려고합니다. 그러나 나는 궁금해했다. Hibernate는 메타 데이터를 현명하게 사용하여 쿼리를 생성한다. 쿼리 생성을 위해 null이 아닌 값만있는 필드 만 허용하는 일종의 인터셉터 만 사용할 수 있다면.

여기에 크고 막연한 질문이 있습니다. 최대 절전 모드로 어떻게 쿼리를 생성합니까? 이와 같은 일이 이전에 시도 된 적이 있다면 시작하기 좋은 곳이 있는지 아는 사람이 있습니까?

이 문제는 CSV를 MySQL에 대량 업로드 한 것처럼 보일 수 있지만 그렇지 않습니다. 일괄 업로드/편집은 주로 동일한 테이블의 레코드를 편집하는 것과 관련이 있습니다.이 경우 해당 필드는 10 개의 서로 다른 테이블에 속해 관련 조인을 유추해야합니다. 나는 더티 IF-ELSE stmt가 SQL 코드를 생성하는 것을 피하기 위해 최대 절전 모드를 사용하려고하고있다.

+0

당신이 어떤 시간을 복용하면 실행 것으로 측정 된 적이 업데이트 문 일괄 처리를 가능하게 classmetadata sessionfactories를 사용 검색어를 업데이트 하시겠습니까? Hibernate는 변경된 엔티티만을 갱신한다. (Entity.dynamicUpdate를 사용하여) 변경된 컬럼 만 업데이트한다고 말할 수 있지만, Hibernate 문서는 종종 생산성이 떨어지는 것을 말한다 (http://docs.jboss.org/hibernate/core/3.6/reference/를 보라). en-US/html_single/# mapping-declaration-class) –

+0

SLA를 충족시키는 데 많은 시간을 사용하지 않는 것이 좋지 않습니다. 따라서 새로운 디자인은 2 시간 이내에 업데이트를 완료 할 수 있어야하므로 현재 전략이 성사되지 않아 쿼리를 생성해야합니다. 팁을 주셔서 감사합니다. 그러나 엔티티 클래스를 지저분하게하고 있습니다. 따라서이 옵션은 일괄 편집에서만 사용 가능해야합니다.다른 경우에는 dynamicUpdate가 실제로 false 여야합니다. 그러나 prob는 이것으로부터 약간의 단서를 얻을 수 있습니다. –

+0

요점은 현재 시간이 5 시간이고이를 2 시간으로 줄이려면 ** 이것이 ** 대부분의 5 시간을 소비하는 부분임을 ** 알지 못한다면 업데이트 쿼리 생성을 최적화하면 안됩니다 시각. 5 시간 중 5 분 밖에 걸리지 않고 500 % 요소로 최적화하면 4 분만 걸립니다. 최적화하기 전에 측정하십시오. –

답변

0

다른 스키마에서 데이터 마이그레이션을 수행했으며로드가있는 2 백만 레코드의 경우 약 30 분이 걸렸습니다. 기존의 변환/병합과 함께 내 dev.mashine을 저장합니다. 그래서 아마 여전히 개선

일 이전에 캐시 된 데이터를 제거하는 일괄

  • 작업의 속도를 각각 후 session.clear()을 사용할 수 있습니다 (시간이 지남에 따라 더 비싼 얻을 것이다, 그렇지 않으면 높이)
  • 여지가
  • 사용 페치 경로는 대부분의 시간을 0
  • 사용되는 각 clear()
  • 프로필 후
  • 캐시 종종 필요한 데이터 (XYZType) inmemory 및 session.attach 객체 그래프를로드 할 때 최대 절전 모드로 적용하지만, NHibernate에 반사 최적화가있는 경우
  • 확실하지 : 대신 반사의
  • 속성을 설정
관련 문제