流畅的hibernate内连接

本文关键字:连接 hibernate | 更新日期: 2023-09-27 18:12:29

我有3个表(Master, Imagen, Linea):

Master
public virtual int Id { get; private set; }
public virtual Imagen imagen { get; set; }
Imagen
public virtual int Id { get; private set; }
public virtual Linea linea { get; set; }
Linea
public virtual int Id { get; private set; }
public virtual String Nombre { get; set; }

我需要一个这样的查询:

SELECT * FROM dbo.Master 
INNER JOIN dbo.Imagen ON dbo.Master.imagen_id = dbo.Imagen.Id 
INNER JOIN dbo.Linea ON dbo.Imagen.linea_id = dbo.Linea.Id 
WHERE dbo.Linea_Id = 5

但是我不知道如何告诉Fluent Nhibernate使用automapper创建这个查询。到目前为止,我已经试过了:

ICriteria c = session.CreateCriteria(typeof(Master))
  .CreateAlias("dbo.Imagen", "img", JoinType.InnerJoin)
  .Add(Restrictions.Eq("img.linea_id", id_linea));
return c.List<Master>();

但是我得到这个错误:无法解析property: dbo of: ImageManager.Model.Entity.Master

关于如何做内连接有什么想法吗?提前感谢

流畅的hibernate内连接

首先,我将从dbo. imagen中删除dbo。使用iccriteria接口时,您需要考虑对象,而不是数据库表,尽管可能存在对象到表和属性到列的一对一映射。

编辑:


另一个选择是使用QueryOver Lambda语法。

   var list = session.QueryOver<Master>()
                        .JoinQueryOver(master => master.imagen)
                        .Where(imagen => imagen.linea.Id == 5)
                        .List();

我不能从你之前的评论中工作,如果你已经修复了它,但我会尝试

ICriteria c = session.CreateCriteria(typeof(Master))
.CreateAlias("imagen", "img", JoinType.InnerJoin)
.CreateAlias("img.linea", "lin", JoinType.InnerJoin)
.Add(Restrictions.Eq("lin.Id", 5));
return c.List<Master>();

编辑:修改如下