2012-09-21 2 views
0

최대 절전 모드에서 hql 쿼리를 사용하여 계단식 저장 또는 업데이트를 수행하는 방법은 무엇입니까? 또한 어떻게 모든 하위 테이블 필드를 업데이트하는 대신 특정 필드에 대해 계단식 업데이트를 사용할 수 있습니까? 예를 들어 테이블 사용자에 대한최대 절전 모드에서 hql 쿼리를 사용하여 캐스케이드를 수행하는 방법


는 userName VARCHAR (10)
비밀번호 VARCHAR (10)

테이블 UserAccessRights을 가지고있다 VARCHAR (10) FK 사용자 테이블
이름
암호 varchar (10) FK 사용자 테이블의
Authpassword의 VARCHAR (10)

캐스케이드 업데이트하지 암호 사용자 이름 만 발생한다. 어떻게하면 될까요?

+0

좀 더 명료하게 표현할 수 있습니까? 코드 예제가 유용 할 수 있습니다. –

답변

2

그렇지 않습니다.

캐스케이드는 Hibernate 구성 문제 (HBM 또는 주석)이므로 계단식 처리를 위해 데이터를 Java로 반환해야합니다. JPA는 SQL API 나 SQL 표준이 아닌 Java API이므로 SQL Server는 SQL 서버에서 JPA 캐스 캐 이드를 인식하지 못합니다. HQL에서 UPDATE/DELETE 행 수정은 전적으로 SQL 서버에서 발생합니다.

1

내가 생각하는 hbm 파일에 캐스케이드 설정을 지정해야합니다.

<set name="columnrecord" cascade="save-update" table="..."...> 
     <key> 
      <column name="COLUMN_NAME" not-null="true" /> 
     </key> 
     <one-to-many class="..." /> 
</set> 
+0

이것은 Session # save (Object) 및 Session # update (Object)와 같은 API에서 작동하지만, Session # createQuery (String)과 같은 HQL API를 사용하는 것이 문제입니다. 어쩌면 HBM XML 조각의 계단식 설정을 사용하는 API의 샘플 사용을 인용 할 수 있습니다. 나는 당신이 교육받을 수 있지만 행복하다고 생각하지 않는다. –

+0

안녕 Darryl 엔티티를 조작하는 HQL을 쓰면 hibernate가 hbm 파일 또는 주석이 달린 엔티티 클래스에있을 수있는 관련 구성을 읽고 필요한 작업을 수행한다. 종속? – Ashish

+1

당신은 나의 요점을 오해합니다. HQL은 SQL 서버에서 데이터를 완전히 삭제하거나 삭제할 수있는 서버의 명령문으로 실행됩니다 (대량 작업). hibernate가 계단식 수행시기를 알기 위해서는 파괴 될 데이터 값이 언제 널이 아닌지를 알아야한다. 그런 다음 추가 SQL 문을 수행하여 계단식 조작을 수행하십시오. 세션 # save(), #delete() 및 #update() API 등을 인용 한 저의 요점은 데이터가 Java의 메모리에로드되어 최대 절전 모드 프로그램 제어가 '캐스케이드'설정을 적용하도록 허용한다는 것입니다. HQL을 수정하는 데이터에서는 이것이 불가능합니다. –

관련 문제