0

简而言之:一个用户有很多“非客户”(这些是用户无法服务的客户)。用户通过连接表关联到多个客户端。

用户类:https ://gist.github.com/dd99690fcaaba2c834d6

客户端类:https ://gist.github.com/10de71bcd1914ded5fb9

DAO:https ://gist.github.com/dd4a369d60a05460d0c0

User 中的“notClients”属性始终为空,谁能帮我理解为什么?

4

1 回答 1

1

简而言之,因为您没有将其包含在您的选择查询中。不确定为什么要编写 SQL 查询并使用 bean 转换器?这是使用休眠的一种非常奇怪的方式。最后,这意味着您得到的不是休眠托管实体。它只是一个对象,您选择的特定内容映射到它上面。

使用休眠的“正常”/“正确”方式是这样的:

private User getUser(int id, String userType)
{
    User result;

    session = HibernateUtil.getWilsonsSessionFactory().getCurrentSession();
    session.beginTransaction();

    Query query = session.createQuery("select u from User u 
                                       where u.id = :id and u.role = :role");
    query.setParameter("id", id);
    query.setParameter("role", userType);

    result = (User)query.uniqueResult();

    session.getTransaction().commit();

    return result;  
}

然后你得到的是一个 Hibernate 实体,它将填充其所有映射属性。

(个人也不会以这种方式使用 uniqueResult,但我愿意承认这在很大程度上是一种风格偏好。)

于 2012-05-13T22:33:16.893 回答