NHibernate : NH 2.1.0 SessionFactory 생성 시 문제 NHibernate

NHibernate 2.1.0 Beta1 부터, 그 전과 다르게 동작하는 방식이 많이 선보입니다. 
기존 코드가 컴파일 에러가 나는 것부터, 동작이 안되는 버그 양산까지...

새로운 기능을 적용할 때, 공식 사이트에서 설명을 하긴 했는데... 잘 안보니 문제가 생기네요...

몇가지 문제를 해결하려면 환경설정에서 다음과 같은 작업을 해주어야 합니다.

NHibernate Upgrade 로 SessionFactory 생성 시에 DBConnection을 수행하려고 한다. 이 때 DB가 없을 경우 에러가 났는데, 

환경설정에서 hbm2dll.keywords 를 none 으로 설정해주면 된다.


 

-. NHibernate 2.1.0 Beta1 부터 configuration에서 다음과 같이 hibernate.cfg.xml 에 추가해야 한다!!!


<!-- NH 2.1.0 -->

<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>

<!-- DML-style operations : delete/insert/update/bulk copy 시에 hql을 이용할 수 있다. (예: delete Enitty)-->

<property name="query.factory_class">NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory, NHibernate</property>

<!-- http://fabiomaulo.blogspot.com/2009/06/auto-quote-tablecolumn-names.html -->

<!-- none으로 해야 cfg.BuildSessionFactory() 시에 Connection을 만들지 않는다. -->

<property name="hbm2ddl.keywords">none</property>


proxy factory 관련 사항은 아시겠고.

DML Style operation을 사용하는 ISession.ExecuteUpdate() 에서 hql을 사용하려면 ASTQueryTranslatorFactory를 지정해줘야 합니다.


마지막으로 각 DB마다 예약어를 처리해주는 방식이 있는데, 기존 DB가 있는 경우는 아무문제 없지만, 테스트용 DB를 임시로 만들고, 삭제하려고 할 때는 문제가 생깁니다. SessionFactory를 만들 때, DB에 connection을 만들려고 하는데, DB가 없는 경우 에러가 발생합니다.


위와 같이 hbm2ddl.keywords=none 으로 하면, 특정 DB의 예약어를 가져오지 않기 때문에 새로운 기능(DB마다 예약어를 피해서 DDL을 생성) 을 못하게 되지만, 기존 테스트 코드를 건드리지 않아서 좋습니다.


DB가 존재하는 경우에는 굳이 안하셔도 됩니다.^^


참고 : http://fabiomaulo.blogspot.com/2009/06/auto-quote-tablecolumn-names.html