如何从多个表中选择(多对多)?

时间:2017-08-13 16:00:21

标签: java hibernate

数据库:enter image description here

我想获得一个列表用户,他们拥有相同的Monhoc(它有maMH = MH1)。 我的代码:

 private final SessionFactory sf = HibernateUtil.getSessionFactory();
Public List<User> listUserMonHoc() {
    try {
        sf.getCurrentSession().beginTransaction();
        Query query = sf.getCurrentSession().createSQLQuery("select a.username, a.name from Monhoc b join b.User a where b.mamh = :id");
        query.setString("id", "MH1");
        List<User> list = query.list();
        sf.getCurrentSession().getTransaction().commit();

        return list;
    } catch (Exception e) {
        System.out.println("sai");
        System.out.println(e.toString());
        //return null;
        e.printStackTrace();
        return null;
    }
}

错误消息:错误:表'b.user'不存在。 谢谢!

1 个答案:

答案 0 :(得分:0)

我可以看到你的查询有问题。首先,您必须加入第三个表,然后从monhoc表中按id搜索。 第二,这里有一个问题

Query query = sf.getCurrentSession().createSQLQuery("select a.username, a.name from Monhoc b join b.User a where b.mamh = :id");

你必须将b.User更改为User,因为b是Monhoc表的别名。 因此,MySql中的本机查询看起来像这样:

SELECT u.username, u.name 
FROM user AS u
INNER JOIN user_monhoc AS um
ON u.username = um.user_id
INNER JOIN monhoc AS m
ON um.mh_id = m.mamh
WHERE ....

我正在使用内部联接(根据您的需要,它可以是不同的。)