hibernate基础之多表查询

  1. hibernate完成一对多关联映射:
    一对多的建表原则:在多的一方创建外键指向一的一方的主键
    多对多建表原则:创建一个中间表,中间表至少有两个字段分别作为外键指向多对多双方的主键
    一对一的建表原则:一方的主键作为另一方的主键
    hibernate是一个ORM的框架:在关系型数据库中描述表与表之间的关系,使用的是外键,开发语言是Java,面向对象的。

一的一方映射的创建:


		
		
			
			
			
			
		

多的一方映射的创建:


		
		
  1. 一对多关系保存一边是否可以:
    不可以,报一个瞬时对象异常:持久态对象关联了一个瞬时态对象

  2. 一对多的级联操作:
    级联:操作一个对象时,是否会同时操作其关联的对象。

  3. 级联保存或更新:
    关键字cascade

cascade="save-updage"
  1. 级联删除:
    删除一边的时候,同时另一方的数据也一并删除,关键字 cascade=“delete”

  2. 一对多设置了双向关联产生多余SQL语句的处理方法:
    使一方放弃外键维护权:一的一方放弃,在set上配置inverse=“true”

  3. hibernate的多对多关系配置:
    双方都放置集合
    多对多关系映射:


		
		
			
			
			
			
		```
	
	
		
		
		
		
	```
  1. 多对多建立的双向关系必须有一方放弃外键的维护,一般是被动方放弃外键的维护权。
  2. hibernate的多对多操作不可以保存一边
  3. 多对多的级联操作同一对多的级联操作
  4. 给用户改选角色:
    先remove再add
public void demo8(){
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		// 查询2号联系人
		LinkMan linkMan = session.get(LinkMan.class, 2l);
		// 查询2号客户
		Customer customer = session.get(Customer.class, 2l);
		// 双向的关联
		linkMan.setCustomer(customer);
		customer.getLinkMans().add(linkMan);
		
		tx.commit();
	}
  1. 给用户删除角色:
    remove
public void demo9(){
		Session session = HibernateUtils.getCurrentSession();
		Transaction tx = session.beginTransaction();
		
		Customer customer = new Customer();
		customer.setCust_name("李兵");
		
		LinkMan linkMan = new LinkMan();
		linkMan.setLkm_name("凤姐");
		
		customer.getLinkMans().add(linkMan);
		
		// 条件在Customer.hbm.xml上的set中配置了cascade="save-update" inverse="true"
		session.save(customer); // 客户会插入到数据库,联系人也会插入到数据库,但是外键为null
		
		tx.commit();
	}```

你可能感兴趣的:(hibernate基础之多表查询)