左外连接:
public List<Object[]> findAll() throws Exception {
//List集合中每个元素都是Object数组,数组的第一个元素是Users对象,第二个元素是House对象,Users对象的houses集合元素没有被初始化,即houses集合没有存放关联的house对象
return currentSession().createQuery("from Users u left join u.houses").list();
}
迫切左外连接:
public List<Users> findAll() throws Exception {
//List集合中的每个元素是Users对象,Hibernate使用fetch(取得)关键字实现了将House对象读取出来后立即填充到Users对象的houses集合属性中 ,select distinct去除重复的Users对象
return currentSession().createQuery("select distinct u from Users u left join fetch u.houses").list();
}
等值连接:
public List<Object[]> findAll() throws Exception {
//等值连接适用于两个类之间没有定义任何关联关系时,如统计报表数据。在where子句中,通过属性作为筛选条件
//使用等值连接时应避免from Users,House这样的语句出现,这样会返回两张表的交叉组合,记录数是两表记录数之积,也就是数据库中的笛卡尔积,结果没有意义
return currentSession().createQuery("from Users u,House h where u=h.users").list();
}
隐式内连接:
public List<House> findAll() throws Exception {
return currentSession().createQuery("from House h where h.users.name=?").setParameter(0, "李林").list();
}
其他连接换关键字即可