2011-10-07 3 views
1

기준 쿼리에 문제가 있습니다.기준을 HQL로 변환하는 방법을 최대 절전 모드로 전환 하시겠습니까?

다른 방법으로 데이터베이스의 일부 개체를 제거하기 위해 HQL 쿼리를 사용합니다. 쿼리가 작동합니다.

다른 방법으로는 실제로 개체를 가져 오는 Criteria 쿼리를 사용합니다. 개체를 가져 오면 데이터베이스와 동기화되지 않습니다.

so 1. REAL 개체를 얻기 위해 로더에서이 기준 쿼리를 동기화하는 방법은 무엇입니까? 2. 1. 할 수없는 경우, 여기 HQL

에 기준 내 기준 쿼리 쿼리를 변환 할 :

String hqlQuery = "select ObjectDao where objectType.client.name = :clientName"; 
    Query query = session.createQuery(hqlQuery) 
    // .setParameter("objectList", objectType) 
      .setParameter("clientName", clientName); 
    final List<ObjectDao> ret2 = query.list(); 

감사를 작동

final Criteria crit = session.createCriteria(ObjectDao.class); 
    if (clientName != null && clientName.length() > 0) { 
     crit.createAlias("objectType.client", "client"); 
     crit.add(Restrictions.eq("client.name", clientName)); 
    } 
    if (objectType != null && objectType.length() > 0) { 
     crit.createAlias("objectType", "objectType"); 
     crit.add(Restrictions.eq("objectType.type", objectType)); 
    } 
    final List<ObjectDao> ret = crit.list(); 

그리고 HQL 변형 쿼리 해달라고!

+0

어떤 종류의 최대 절전 모드 레벨 2 캐시를 사용하고 있습니까? – ssedano

답변

0

레벨 2 캐시를 사용하고있는 것 같습니다. 그렇다면 이것도 작동하지 않습니다.

select o from ObjectDao o where o.objectType.client.name = :clientName 
+0

예 쿼리가 작동하지만 HQL을 사용하는 경우 오브젝트가 여전히 세션 evan에 있습니다. ( – superscral

0

나는 당신이 그런

delete from Client where ... 

으로 쿼리를 실행 한 후 ObjectDaos 여전히 그냥 삭제 클라이언트를 가진 반환하는 기준 쿼리를 실행하고, 제대로 이해하고.

맞다면 예상되는 동작입니다. DML 스타일의 검색어 (업데이트 및 삭제 검색어)는 세션을 건너 뜁니다. 이것은 당신이 삭제 한 어떤 객체가 이미 삭제 질의 이전에 세션에로드 되었다면, Hibernate는 그것들을 세션에서 삭제하지 않을 것이고 세션은 데이터베이스의 실제 상태를 반영하지 않을 것임을 의미한다.

개체를 삭제하고 메모리에 개체 그래프를 유지하려면 Session.delete를 사용하십시오.

삭제 쿼리 후 세션을 비우고 지 웁니다.

+0

) session.clear(); session.flush();가 HQL 삭제 후 이미 완료되었지만 오브젝트가 아직 여기에 있습니다. HQL 삭제를 위해 조건을 잘 지키지 않는 곳을 지우려면 – superscral

+0

여기서 프로세스 : 1. 먼저 사용자는 을 삭제할 개체를 표시 할 수 있습니다. 따라서 Criteria 및 지금 HQL 쿼리를 사용하여이 작업을 수행했습니다. 2. 동의하는 사용자는 "삭제 버튼 을 누르면 개체를 삭제할 수 있습니다. 양식에 새 매개 변수를 입력하고"표시 "버튼을 클릭하면 해당 개체를 볼 수있는 것에 동의하지 않으면 그는 아마도을 삭제하려고합니다. petfs를 개선하기 위해 HQL에 대한 삭제 삭제 변경이 있습니다. 많은 객체를 제거하기 위해 HQL 삭제가 더 좋습니다. 그러나 지금은 표시 단계가 좋지 않습니다. ( HQL 후에 clear/close를 추가하면 : 문제! :(고마워 – superscral

관련 문제