문제

목표

  1. 호출 CREATE TEMPORARY TABLE 네이티브 SQL을 사용하지 않고 Hibernate에서 명령문을 작성합니다.이는 HQL 또는 Hibernate API만 사용한다는 의미입니다.
  2. 임시 테이블에 개체를 저장합니다.
  3. 기존 테이블과 임시 테이블을 활용하는 저장 프로시저를 호출합니다.
  4. DROP 완료되면 임시 테이블.(꼭 필요하지 않다는 것은 알지만, 그렇게 하는 것이 좋은 습관이라고 생각합니다.)

배경

  1. 저는 SQL에 매우 익숙하지만 Hibernate는 처음 접합니다.
  2. 나는 누군가의 결정 때문에 프로젝트에서 강제로 Hibernate를 사용해야 했습니다.
  3. 웹 양식을 Oracle 데이터베이스에 저장하겠습니다.
  4. 웹 양식에는 각 셀에 하나씩 텍스트 필드(다른 사람이 디자인한)로 가득 찬 테이블이 포함되어 있습니다.
  5. 사용자가 클릭하면 Save, 값 해야 하다 단일 트랜잭션으로 저장됩니다.
  6. 웹 양식은 데이터베이스 보기로 백업됩니다.
  7. 데이터베이스 뷰는 EAV 패턴을 사용하여 데이터베이스 테이블에서 생성됩니다.(열이 어떻게든 동적이기 때문에 그렇게 됩니다.)
  8. 웹 양식의 각 텍스트 필드는 데이터베이스 테이블의 한 행으로 모델링됩니다.
  9. 웹 양식 사용 표시 SELECT 견해에 관한 진술.
  10. 웹 양식 업데이트 사용 UPDATE 뷰에 대한 명령문은 INSTEAD OF 보기의 트리거.
  11. 변경된 값만 업데이트됩니다.각 업데이트에 대한 감사 추적이 있습니다.
  12. 사용자의 통지 없이 다른 사용자가 값을 업데이트하면 트랜잭션이 롤백됩니다.다음은 그러한 시나리오의 예입니다. (I) a의 값은 4 사용자가 웹 양식을 표시할 때 (II) 다른 사용자가 동일한 필드를 다음으로 업데이트합니다. 5 (III) 첫 번째 사용자가 필드를 다음으로 업데이트합니다. 2 웹 양식을 제출합니다.

원래 제안된 솔루션

  1. AJAX(jQuery)를 사용하여 텍스트 필드의 변경 사항을 감지하고 사용자가 변경한 내용만 제출합니다.
  2. 그러나 다른 사용자가 변경한 내용은 데이터베이스에서 감지되어야 합니다.

더 잘 작동할 것으로 예상되는 솔루션

  1. 사용자가 클릭하면 Save, 임시 테이블(임시 테이블은 현재 세션/연결에서만 볼 수 있는 테이블이며, 세션 종료/연결 끊김 시 자동으로 삭제됨)을 생성하고 개체(셀)를 임시 테이블에 저장합니다.
  2. 거래를 시작하세요.
  3. 일부 기존 테이블(또는 성능을 위해 관련 행만)을 잠급니다.
  4. 제출된 데이터를 기존 데이터와 비교합니다.
  5. 눈에 띄지 않는 변경 사항이 발생한 경우 트랜잭션을 롤백하세요.
  6. 필요한 행을 업데이트합니다.
  7. 트랜잭션을 커밋하고 테이블을 잠금 해제합니다.
  8. 임시 테이블을 삭제합니다.

어떤 아이디어가 있나요?

도움이 되었습니까?

해결책

이것은 귀하의 정확한 요구 사항에 대한 답변은 아니지만 답변을 시도한 적이 없다는 점을 고려하면 ...다음과 같은 것을 사용하여 임시 CSV 테이블을 사용하는 것을 고려해 보셨나요? http://csvjdbc.sourceforge.net/.

최대 절전 모드를 통해 수행해야 하는 요구 사항을 따르지는 않지만 데이터베이스에 구애받지 않으며 크로스 플랫폼입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top