hibernate关联关系

本文介绍了Hibernate框架中的关联关系,包括一对一、一对多/多对一、多对多的映射。通过实例展示了如何配置实体类和.hbm.xml文件,强调了一对多关联的实现。还讨论了懒加载问题,解释了当Session关闭后访问关联对象会导致异常,并提供了解决懒加载问题的方法和配置选项。
摘要由CSDN通过智能技术生成

关联关系在orm框架中是一个比较重要的一部分,在学习Hibernate框架的朋友可以重点的关注一下。关联关系通俗一点来说就是数据库表与表之间的关系(主外键关系),hibernare框架弱化了数据库表的一些操作,强化了实体类的操作,在hibernate中操作实体类就等同于操作数据库表。
它将数据库中的表映射成对应的对象,以对象的形式展现,这样我们就可以通过映射的对象来对数据库中的数据进行间接的操作。
关联映射是将数据库中的表映射成与之相对应的对象,当你对这个对象进行操作的时候,Hibernate会对数据库中对应的表执行相应的操作,你对该实体的操作实际上就是在间接的操作数据库中与之相对应的表。

关联的分类:关联可以分为一对一、一对多/多对一、多对多关联
一对多 : ,一对多是指一个对象对应多个对象 同样也分为单向关联和双向关联 如:一个教室可以有多个学生
1实现工具类

package com.lx.three.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
 * 这个类是在学习hibernate的过程中使用 (整合ssh框架之前用)
 * 作用:
 * 可以用来检测所有的映射文件是否正确   90%
 * @author lx
 *
 */
public class SessionFactoryUtils {
 private static SessionFactory sessionFactory;
 static {
//  存放当前会话
  Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
  sessionFactory = cfg.buildSessionFactory();
 }
 public static Session openSession() {
  Session session = sessionFactory.getCurrentSession();
  if(session == null) {
   session = sessionFactory.openSession();
  }
  return session;
 }
 public static void closeSession() {
  Session session = sessionFactory.getCurrentSession();
  if(session != null && session.isOpen()) {
   session.close();
  }
 }
 public static void main(String[] args) {
  Session session = SessionFactoryUtils.openSession();
  session.beginTransaction();
  System.out.println(session.isConnected());
  SessionFactoryUtils.closeSession();
  System.out.println(session.isConnected());
 }
}

为了方便我们把所有的方法都写在一起DemoDao

package com.lx.three.dao;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.lx.three.entity.Order;
import com.lx.three.entity.OrderItem;
import com.lx.three.util.SessionFactoryUtils;
public class DemoDao {
 /**
  * 为了测试关系型映射文件配置准确
  *  讲解insert=false,update=false的用途
  * @param order
  * @return
  */
 public Integer addOrder(Order order) {
  Session session = SessionFactoryUtils.openSession();
  Transaction transaction = session.beginTransaction();
  Integer oid = (Integer)session.save(order);
  transaction.commit();
  session.close();
  return oid;
 }
 public Integer addOrderItem(OrderItem orderItem) {
  Session session = SessionFactoryUtils.openSession();
  Transaction transaction = session.beginTransaction();
  Integer otid = (Integer)session.save(orderItem);
  transaction.commit();
  session.close();
  re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值