2009-11-20 3 views

답변

2

HQL 변환은 매핑과 런타임 동작에 따라 다르므로 정적으로 그렇게하는 방법은 없을 것 같습니다.

실제 데이터베이스에 대해 HQL을 실행하고 특정 rdbms 또는 NHProf에 대한 프로파일 러를 통해 생성 된 SQL을 캡처 할 수 있습니다.

+0

MYSQL과 NHProf를 사용하고 있습니다. 그러나 DB에 대해 실행할 수없는 SQL을 생성합니다. INSERT INTO 표 1 (Column1, Column2, Column3, Column4, Column5) VALUES (?,?,?,?,?) – ranj

+0

이것은 매개 변수 선언 및 초기화 여야한다는 위의 매개 변수가있는 쿼리입니다. NHprof가 SQL 복사 및 붙여 넣기를 지원합니다. 기타 질문 : http://groups.google.com/group/nhprof –

0

나는 모든 매개 변수에 익숙하지 해요,하지만이 작동하는 것 같다 ...

ISessionFactory sessionFactory = ... 
var sf = (SessionFactoryImpl) sessionFactory; 
var hql = "from Person"; 
var qt = sf.Settings.QueryTranslatorFactory.CreateQueryTranslator("", hql, new Dictionary<string, IFilter>(), (ISessionFactoryImplementor) sessionFactory); 
qt.Compile(new Dictionary<string, string>(), true); 
var sql = qt.SQLString; 
Console.WriteLine(sql); 
0

나는의 값이 자동 변환 SQL에 HQL 동적으로 무엇인지 확실하지 않다

정확하게 이걸로 무엇을하려고합니까?

가장 쉬운 방법은 SQL Server 프로파일 러를 실행하여 생성 된 SQL을 보는 동안 코드를 실행하는 것입니다. 그러나 더 나은 접근법은 nhProf (www.nhprof.com)를 다운로드하여 코드와 함께 사용하는 것입니다. 당신은 당신의 코드가 SQL에서 출력하고있는 것을 정확히 볼 수있을 것이고 포맷하고 색상을 지정하고 nhibernate의 사용법을 향상시키는 방법에 대한 팁을 줄 것입니다.

private string GetSQL(string hql) 
{ 
    using (var iSession = ...) 
    { 
     var session = (NHibernate.Engine.ISessionImplementor)iSession; 
     var sf = (NHibernate.Engine.ISessionFactoryImplementor)iSession.SessionFactory; 

     var sql = new NHibernate.Engine.Query.HQLStringQueryPlan(hql, true, session.EnabledFilters, sf); 

     return string.Join(";", sql.SqlStrings); 
    } 
} 
0

이는 HQL 쿼리에서 SQL을 얻을 수있는 가장 쉬운 방법이 될 것으로 보인다. 그것은 베타 버전이었습니다. 여기있어! (hql2sql.jsp)

<SCRIPT type="text/javascript"> 
    <% 
     org.hibernate.Session ThisSession = SessionFactory.getSession(); 
     org.hibernate.engine.SessionImplementor ThisSessionImplementor = (org.hibernate.engine.SessionImplementor) ThisSession; 
     org.hibernate.engine.SessionFactoryImplementor ThisSessionFactory = (org.hibernate.engine.SessionFactoryImplementor) ThisSession.getSessionFactory(); 
     String HQL_Query = "SELECT ... "; 
     String SQL_Query; 
     try{ 
      org.hibernate.engine.query.HQLQueryPlan HQL_Query_Plan = new org.hibernate.engine.query.HQLQueryPlan(HQL_Query, true, ThisSessionImplementor.getEnabledFilters(), ThisSessionFactory); 
      SQL_Query = org.apache.commons.lang.StringUtils.join(HQL_Query_Plan.getSqlStrings(), ";"); 
     }catch(Exception e){SQL_Query = "ERROR!! :: " + e.getMessage();} 
    %> 
    $(document).ready(function(){ 
     $('span[role="HQL"]').text(" <%=HQL_Query%>"); 
     $('span[role="SQL"]').text(" <%=SQL_Query%>"); 
    }); 
</SCRIPT> 
<div style="border:2px solid brown"> 
    Ваш запрос на HQL: 
    <br/><br/><span role="HQL">&nbsp;</span> 
</div> 
<br> 
<div style="border:2px solid green"> 
    Ваш запрос на SQL: 
    <br/><br/><span role="SQL">&nbsp;</span> 
</div> 
1

내 오랜 교육 : NHibernate에 3.2