2012-09-05 4 views
3

내가 (2) 첫 번째 두에 업데이트를 할 내가는 setMaxResults을 통해 물어업데이트는 setMaxResults

Transaction transaction = session.beginTransaction(); 
Query query = session.createQuery("update database set floop= :ctrl1" +" where ctrl= :ctrl2 ").setMaxResults(2); 
query.setMaxResults(2); 
query.setParameter("ctrl1",3); 
query.setParameter("ctrl2", 5); 

이 코드에 문제가 그는 모든 업데이트를 만들고, 그것이 해당 섹션 희망 내가 잘못한 것을 기록하는 것과 같이 ?? 어떤 도움

주셔서 감사합니다 나는 ession.createSQLQuery를 사용하는 생각,하지만 난

답변

1

setMaxResults 쿼리하지 영향을받는 행의 수에 의해 반환되는 결과의 수를 제한하는 방법을 모른다.

제한된 행 세트 만 업데이트하려는 경우 where 조건 내에서이 행을 지정해야합니다. 업데이트 된 행 수에 대한 엄격한 제한 설정은별로 의미가 없습니다. 업데이트 될 행을 알 수있는 방법이 없기 때문입니다.

1

query.setMaxResults(2);selection 개의 검색어에 사용되며 insertion/updation은 무시됩니다. selection 개의 검색어를 사용하면 결과에 2 개의 레코드가 표시됩니다.

0

setMaxResultsselect에만 적용됩니다. 귀하의 문제에 대해 select 쿼리를 수행 한 다음 query.setMaxResults(2)을 사용하면 최대 2 개의 요소 목록이 반환됩니다. 그런 다음 반환 된 목록을 반복하고 반환 된 하나 또는 두 개의 요소에 대해 session.update를 사용합니다.

0

제한된 수의 행만 업데이트하고 다른 쿼리는 이미 응답 한 것처럼 완벽하게 유효한 사용 사례가 여러 개 있습니다. 최대 절전 모드 쿼리는이 문제를 처리 할 수 ​​없으므로 기본 SQL을 사용해야합니다.

Transaction transaction = session.beginTransaction(); 
Query query = session.createSQLQuery("UPDATE database SET floop= :ctrl1 WHERE ctrl= :ctrl2 LIMIT :limit "); 
query.setParameter("ctrl1",3); 
query.setParameter("ctrl2", 5); 
query.setParameter("limit", 2); 

SQL 쿼리 위의 기본 테이블과 컬럼을 사용할 필요가 있습니다 :

당신은 당신 만의 MySQL에 적용됩니다 그래서이 답변을 사용하는 데이터베이스의 유형 질문에 지정하지 않은 ORM 모델에있는 이름이 아니라 이름.