hibernate的关联表查询

 三、 Hibernate 进行多表关联查询Hibernate对多个表进行查询时,查询结果是多个表的笛卡尔积,或者称为“交叉”连接。 例如:from Student, Book from Student as stu, Book as boo from Student stu, Book boo注意:让查询中的Student和Book均是表student和book对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。别名应该服从首字母小写的规则是一个好习惯,这和Java对局部变量的命名规范是一致的。

    下面列举一个完整的例子来说明Hibernate对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表tBookInfo和BookSelection的结构和其对应的hbm.xml、class文件就不一一列举了,有需要详细了解的朋友,请联系我):

String sTest = "from tBookInfo book, BookSelection sel where book.id = sel.bookId"; 
Collection result = new ArrayList(); 
Transaction tx = null; 
try { 
Session session = HibernateUtil.currentSession(); 
tx = session.beginTransaction(); 
Query query = session.createQuery(sql); 
result = query.list(); 
tx.commit(); 
} catch (Exception e) { 
throw e; 
} finally { 
HibernateUtil.closeSession(); 

ArrayList sList = (ArrayList) result; 
Iterator iterator1 = sList.iterator(); 
while (iterator1.hasNext()) { 
Object[] o = (Object[]) iterator1.next(); 
tBookInfo bookInfo = (tBookInfo) o[0]; 
BookSelection bookSelect = (BookSelection) o[1]; 
System.out.println("BookInfo-Title: " + bookInfo.getTitle()); 
System.out.println("BookSelection-BookSelectionId: " + bookSelect.getId()); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate提供了多种方式来进行联查询,其中一种常用的方式是使用注解来配置系。下面是一个示例: 假设有两个实体类:`User`和`Order`,它们之间存在一对多的系,即一个用户可以拥有多个订单。 ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 其他属性 @OneToMany(mappedBy = "user") private List<Order> orders; // getter和setter方法 } @Entity @Table(name = "orders") public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 其他属性 @ManyToOne @JoinColumn(name = "user_id") private User user; // getter和setter方法 } ``` 在`User`类中,使用`@OneToMany`注解标注了与`Order`类的一对多系,并通过`mappedBy`属性指定了反向联的属性名。 在`Order`类中,使用`@ManyToOne`和`@JoinColumn`注解标注了与`User`类的多对一系,并通过`name`属性指定了外键列名。 这样配置之后,就可以通过Hibernate进行联查询了。例如,查询某个用户及其所有订单: ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = session.get(User.class, userId); List<Order> orders = user.getOrders(); tx.commit(); session.close(); ``` 上述代码中,通过`session.get(User.class, userId)`获取到一个用户对象,然后通过`user.getOrders()`获取该用户的所有订单。 这只是联查询的一种示例,实际使用中还可以使用其他注解和配置方式来满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值