您当前的位置: 首页 >  hibernate

Charge8

暂无认证

  • 1浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Hibernate5双向多对一映射

Charge8 发布时间:2018-08-12 15:53:34 ,浏览量:1

 

 

 一、 POJO 类 及 xxx.hbm.xml 配置文件
public class Student {
	private int id;
	private String sname;
	
	private Teacher teacher; //老师对象属性

    ....
}

public class Teacher {
	private Integer id;
	private String tname;
	
	//学生对象集合属性
	private Set student = new HashSet();
    ...
}

从老师的角度:双向n(学生)many-to-one , 和单向没变化。映射用个 package 属性,方便管理包名


    
        
            
            
        
        
            
        
        
      
        
            
        
    

从老师的角度:双向1(老师) one-to-many 映射 ,映射用个 package 属性,方便管理包名


    
        
            
            
        
        
            
        
        
        
        
        	
        		
        	
        	
        
    

inverse=“true”: 它的作用是指定双向多对一的映射中, 由那一边来维护关系。             inverse="false" (默认值是)主动维护             inverse="true" 放弃维护             无     两端都维护             在双向1对n中,推荐 inverse="true",将 1 端放弃维护, 让 n 端主动维护。             cascade="delete", 表示执行级联删除, 开发时不建议设置,建议根据需求手工方式来处理         order-by="类属性名 asc/desc ": 设置查询出来的数据的排序   

	@Test
	public void test() {
		Teacher teacher = session.get(Teacher.class, 1);
		Set student = teacher.getStudent();
		for (Student stu : student) {
			System.out.println(stu);
		}
		
	}

----降序----
Student [id=2, sname=学生2, teacher=Teacher [id=1, tname=老师1]]
Student [id=1, sname=学生1, teacher=Teacher [id=1, tname=老师1]]

图简单明了

    

 

二、 junit 测试

建表 sql :   和单向一样

1、 新增:推荐先插入一(1)的这端, 效率高!
	@Test
	public void test() {
		Teacher teacher = new Teacher("老师1");
		
		Student student1 = new Student(); 
		student1.setSname("学生1");
		Student student2 = new Student(); 
		student2.setSname("学生2");
		
		//建立双向多对一关联关系  
		student1.setTeacher(teacher);
		student2.setTeacher(teacher);
		
		teacher.getStudent().add(student1);
		teacher.getStudent().add(student2);
		
		session.save(teacher);
		session.save(student1);
		session.save(student2);
	}

 

2. 删除:

结论: 删除 Student (多) 这端数据,可正常删除,Teacher(1) 这端数据 没影响 。 

           不使用 cascade="delete"时, 删除 Teacher (1) 这端数据, 会出错, 因为受到 外键约束。

3. 修改: 正常操作, 没问题 4. 查询:

   结论: 默认情况下, 查询多(n)这端对象, 只要没使用到关联的对象, 不会发起关联的对象的查询!

           因为使用的懒加载, 所以在使用关联对象之前关闭session, 必然发生赖加载异常!  

 

 

 

 

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0432s