NHibernate从mysql中的多个表中检索数据

时间:2010-12-28 10:15:31

标签: mysql nhibernate criteria

我在mysql中有3个表

User
---------------------
`id` (auto increment)(PK)
`user_name`
`password`
`first_name`
`last_name`
`created_at`
`modified_at`
`email`
User_Role 
-----------------------
`user_id` (PK)
`role_id` (PK)
Role
----------------------
`id`(PK)
`name`

我想执行查询

SELECT u.*,r.name
FROM user u
JOIN user_role ur ON UR.user_id=u.id
JOIN role r on UR.role_id=r.id

任何人都可以帮我解决NHibernate的标准吗?

我尝试使用此代码

ICriteria Criteria = session.CreateCriteria(typeof(User));
Criteria.CreateAlias("User_Role", "User_Role");
Criteria.CreateAlias("User_Role.Role", "UsrRole");
Criteria.Add(Expression.Eq("id", Uid));

但它显示错误。


我想使用查询

从这些表中获取信息

SELECT u.*,r.name
FROM user u
JOIN user_role ur ON UR.user_id=u.id
JOIN role r on UR.role_id=r.id

我尝试使用此代码

ICriteria Criteria = session.CreateCriteria(typeof(User));
Criteria.CreateAlias("User_Role", "User_Role");
Criteria.CreateAlias("User_Role.Role", "UsrRole");
Criteria.Add(Expression.Eq("id", Uid));

但显示错误

1 个答案:

答案 0 :(得分:0)

NHibernate将自动生成必要的查询。阅读http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/tutorial.html#tutorial-associations。然后考虑一下你的类和映射。

可能看起来像

namespace FirstSolution.Domain
{
    public class User
    {
        public Guid id { get; set; }
        public string user_name { get; set; }
        /* ... */
    }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
                   assembly="FirstSolution" 
                   namespace="FirstSolution.Domain">

  <class name="User">
    <id name="id">
      <generator class="guid" />
    </id>
    <property name="user_name" />
  </class>

</hibernate-mapping>