2009-06-15 6 views
2

IQuery 인터페이스 또는 레코드를 업데이트하기 위해 hql을 전달할 수있는 ISession에서 query.executeUpdate() 메서드를 찾을 수 없습니다. NHibernate에에서nHibernate에서 HQL 쿼리를 업데이트하는 방법?

string hql = "update QAD qa set qa.NFS=:NFS where qa.ID = 1145"; 
IQuery q = session.CreateQuery(hql).SetString("NFS", "10"); 
+0

허용되는 답변에 대한 Mauricio의 의견을 참조하십시오. 이제 구현되었습니다. – MPritchard

+0

내 (upvoted) 대답은 어떤 이유로 든 삭제되었습니다 ..하지만 당신은이 기능을 사용하기 위해 NHibernate의 v2.1이 필요하다고 말했습니다. 어쨌든 더 최신 버전이있을 것입니다. @undo 내 대답을 삭제하는 이유는 무엇입니까? 최소한 2 명이 도움이되었을 것 같습니다. –

+0

@DerekEkins, 사례를 meta로 제기 할 수도 있습니다. OP가 원하는대로 HQL이 지원됩니다. 우리는 과장된 사용자가 유효한 대답 인 것처럼 보이는 것을 삭제해서는 안됩니다. –

답변

0

우리가 일을 조금 다른 : 여기

은 HQL입니다 당신이 데이터베이스에서 구조를 얻을 값을 변경 한 후 변경 내용을 커밋합니다. 더 이상 실제 문제를 해결하는 어떤 대답이 때문에 내가 ... 좀 더 직접적으로이 작업을 수행 할 수

//Pseudocode 
T t = session.Get<T>(id); 
t.NFS = 10; 
session.SaveOrUpdate(t); 
session.Transaction.Commit(); 
+0

단점은 단 하나의 업데이트 문 대신 데이터베이스의 전체 개체를 첫 번째 단계로 선택하는 것입니다. 나는 이것을 여기서 무시할 수 있을지 모르겠다. – dotnetcoder

0

생각하지 않는다, 여기에 그것을 할 방법입니다, 당신의 NHibernate에 버전을 가정하는 것은 아니다 너무 오래 그것을 지원할 :

string hql = "update QAD qa set qa.NFS=:NFS where qa.ID = 1145"; 
IQuery q = session.CreateQuery(hql).SetString("NFS", "10"); 
q.ExecuteUpdate(); 

개인적으로 나는 오히려 매개 변수로 너무 id를 설정하고 싶습니다. 원하는 경우 ExecuteUpdate 반환 값을 확인할 수 있습니다. 업데이트 된 엔티티의 수를 알려줍니다.

HQL DML 문에 대한 참조 문서는 here입니다.

관련 문제