NHibernate получить данные из нескольких таблиц в MySQL - PullRequest
0 голосов
/ 28 декабря 2010

У меня есть 3 таблицы в mysql

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 голосов
/ 28 декабря 2010

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...