内部或右外部加入Nhibernate和Fluent Nhibernate on Many to Many系列

sni*_*ker 6 nhibernate nhibernate-mapping fluent-nhibernate

如何强制NHibernate在多对多集合中执行右外连接或INNER连接而不是LEFT外连接?

我想要这样做的原因是因为应用于集合元素的过滤.使用左连接时,您将获得与未过滤查询相同的行数,但过滤掉的元素只显示所有字段的NULL.但是,使用右连接时,将从查询中返回正确的行数和元素数.

我希望可以在集合的映射中的某处指定连接.

Joh*_*n L 5

我认为在集合映射中指定右连接或内连接是不可能的.该fetch子句的唯一选项是默认的左外连接和顺序选择.

问题在于,当您创建映射时,NHibernate需要知道如何从连接的左侧获取任意根项的集合元素.使用右连接或内连接时,根对象可能不存在于返回的集合中,因此您将陷入此点.

如果筛选条件是静态的,则可以where在映射中指定子句.我认为这将是适合您情况的推荐解决方案.

解决方法是在对象中使集合成为私有,然后创建另一个调用HQL查询的属性来实现内部联接并返回该集合.这个返回的集合将具有您想要的语义,但您需要单独的方法来添加或删除集合中的项目.