2017-10-11 19 views
0

에서 복합 ID를 확장 :NHibernate에 아래와 같이 우리는 매핑 된 복합 기본 키 테이블이 HQL

mapping.CompositeId().KeyReference(e => e.Node).KeyProperty(e => e.DtFr).UnsavedValue("any"); 

우리는 복잡한 조건에 의해 테이블에서 여러 행을 삭제해야합니다 예를 들어, n.Node.Contract.Code = "1234"

delete from Entity n where n in (select c from Entity c where c.Node.Contract.Code = "1234") 

그러나 생성 된 SQL 쿼리에

는 기본 키 열 주위에 괄호가없는 :

solution에 따르면 우리는 다음 HQL을 시도 :

select ... from ENTITY n where n.IDNODE, n.DTFR in (select c.IDNODE, c.DTFR ... 

우리는 HQL (where (n) in)에 괄호를 추가 명시 적으로했지만, NHibernate에 그들을 무시합니다.

NHibernate가 올바른 SQL을 생성하도록하기 위해 할 수있는 일은 무엇입니까?

NHibernate의 버전은 4.1.1.4000이고, RDBMS는 Oracle 10.2입니다.

SQL dialect는 NHibernate.Dialect.Oracle10gDialect으로 설정됩니다.

답변

1

NHibernate에 버그가있을 가능성이 큽니다. 문제가 추가되었습니다 : https://github.com/nhibernate/nhibernate-core/issues/1376.

이제 유일한 해결책은 삭제하려는 모든 항목을로드 한 다음 삭제하는 것입니다.

var entities2delete = session.CreateQuery("select c from Entity c where c.Node.Contract.Code = \"1234\"").List(); 
foreach (var item in entities2delete) session.Delete(item);