与JoinTable的OneToMany关联返回null

时间:2012-05-13 22:18:26

标签: java hibernate

简而言之:用户有许多“非客户”(这些是用户无法提供的客户端)。用户通过连接表与多个客户端关联。

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

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

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

User中的“notClients”属性始终为null,任何人都可以帮我理解原因吗?

1 个答案:

答案 0 :(得分:1)

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

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

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,但我愿意承认这主要是一种风格偏好。)