Nhibernate强制多对一关系上的内连接

Nhibernate强制多对一关系上的内连接,nhibernate,Nhibernate,我在两个实体a和B之间映射了多对一关系。我将使用水果和颜色来模拟我的场景: 假设所有水果只有一种颜色。所以我在我的水果类中有一个颜色属性,在我的水果映射代码中我有: ManyToOne(f=>f.Color, mapper=>mapper.Column("ColorId")); 生成的SQL具有以下特性: Select f0_.Name, f0...From Fruit f0_ left outer join Color c0_ on f0_.ColorId = c0_.i

我在两个实体a和B之间映射了多对一关系。我将使用水果和颜色来模拟我的场景:

假设所有水果只有一种颜色。所以我在我的水果类中有一个颜色属性,在我的水果映射代码中我有:

ManyToOne(f=>f.Color, mapper=>mapper.Column("ColorId"));
生成的SQL具有以下特性:

Select f0_.Name, f0...From Fruit f0_
  left outer join Color c0_
  on f0_.ColorId = c0_.id
我想知道有没有办法强迫一个内部连接而不是外部连接。因为从业务的角度来看,没有颜色的水果不是真正的水果,也不应该存在。

使用Criteria API,我们可以实现
和/或
连接:

或者使用XML

  <class name="Fruit" table="Fruits" where="colorId IS NOT NULL" ... >

(见附件)


因此,这不会从左到内改变,但至少映射将只允许有多彩的果实…

虽然这是一个有价值的解决方案,但我在映射中寻找类似的东西,但不是在查询级别。谢谢你的回答,我明白了。但恐怕这是唯一的解决办法。请看这里:。但是有一个选择。。。我延长了我的回答。谢谢。我想这回答了我的问题。
// explicit inner join
var innerResult = session.CreateCriteria<Fruit>()
  .CreateCriteria("Color", NHibernate.SqlCommand.JoinType.InnerJoin)
  .List<Fruit>();
// Mapping Fruit
Table("Fruits");
Where("colorId IS NOT NULL");
...
  <class name="Fruit" table="Fruits" where="colorId IS NOT NULL" ... >