Hibernate的三种状态和三种关系

gvg## 状态:

1.自由态

session空间中没有这个对象
数据库中也没有与之对应的数据

2.持久态

session空间中有这个对象
数据库中有与之对应的对象

3.游离态

session空间中没有这个对象
数据库中有与之对应的数据

关系:

1.一对一

新建User.java和card.java两个实体类

Card.hbm.xml:

 <!-- 用User的主键作为card的id的外键 -->
                <generator class="foreign">
                	<param name="property">user</param>
                </generator>
 <one-to-one name="users" class="com.sw.entity.Users"></one-to-one>

User.hbm.xml:

 <!-- User对应的Card的信息 
        	 name:实体类中一对一的属性名称
        	 cascade:级联
        -->
<one-to-one name="card" class="com.lq.entity.Card" cascade="all"></one-to-one>

测试类

//添加数据 
		User u=new User("admin");
		Card c=new Card("431111111");
		//相互设置  互设
		u.setCard(c);
		c.setUser(u);
		
		session.save(u);//级联操作
 //删除

		User u=session.get(User.class, 1);
		session.delete(u);  //级联删除
//查询 		

	Users u=session.get(Users.class, 1);

一对多

新建Teacher.java 和Student.java两个实体类

Teacher.hbm.xml(映射文件)

<!-- 配置老师中学生的集合属性
        	 inverse:维护关系反转给 Student
        	 cascade: 少的一方级联 
        	 inverse:  多的一方维护关系 
         -->
<set name="students"  inverse="true" cascade="all">
            <key>
         		<column name="ID" />   <!-- 学生表中的外键 -->
            </key>
            <!-- 配置一对多的关系 -->
            <one-to-many class="com.lq.entity.Student" />
</set>

Student.hbm.xml(映射文件)

<!-- 添加多对一的配置 多个学生对象对应一个老师对象 -->
<many-to-one name="teacher" class="com.lq.entity.Teacher" column="tid">
            <column name="TEACHER" />
</many-to-one>

hibernate.cfg.xml配置映射文件

  <mapping resource="com/lq/entity/Student.hbm.xml"/>
  <mapping resource="com/lq/entity/Teacher.hbm.xml"/>

测试

//添加
Teacher t=new Teacher("qiqi");
Student s=new Student("琪琪");
Student s1=new Student("琪琪1");
//互设
 t.getStudents().add(s);
t.getStudetns().add(s1);
s.setTeacher(t);
s1.setTeacher(t);
session.save(t);//添加到数据库

多对多

新建Teacher.java 和Student.java两个实体类

学生集合属性的映射
学生跟老师的关系映射到第三方表中 table=“关系表的表名”
key:学生集合中的学生对象通过哪个字段可以找到关系表中映射的自己的老师 tid
少的一方去负责级联
多的一方负责维护关系

Teacher.hbm.xml(映射文件):

<set name="students" cascade="all" inverse="true" table="tea_stu">
    	<key column="tid"></key>
    	<!-- 多对多配置 -->
    	<!-- 学生对象通过自己的主键id和老师的id在关系表中映射 -->
    	<many-to-many class="com.sw.entity.Student" column="sid">
    	</many-to-many>
</set>

Student.hbm.xml:

<set name="teachers" table="tea_stu">
          <key column="sid"></key>
            	
   		<many-to-many class="com.sw.entity.Teacher" column="tid">
   		</many-to-many>
</set>

hibernate.cfg.xml

<mapping resource="com/sw/entity/Teacher.hbm.xml"/>
    <mapping resource="com/sw/entity/Student.hbm.xml"/>

测试

// 添加学生 添加老师
    	Teacher t = new Teacher("琪琪");
    	Teacher t1 = new Teacher("暴躁琪琪");

		Student s = new Student("qiqi");
		Student s1=new Student("qiqi1") ;
		//互设
		t.getStudents().add(s);
		t.getStudents().add(s1);
		t1.getStudents().add(s);
		t1.getStudents().add(s1);
		
		s.getTeachers().add(t);
		s.getTeachers().add(t1);
		s1.getTeachers().add(t);
		s1.getTeachers().add(t1);

		//保存
		session.save(t);
		session.save(t1);
		
//查询所有  hql语句
    		List<Teacher> list=session.createQuery("from Teacher").list();
    		//遍历
    		for (Teacher t : list) {
    			System.out.println(t.getTname());
    			Set<Student> teachers=t.getStudents();
    			for (Student s : teachers) {
    				System.out.println(s.getSname());
    			}
    		}
//删除一个学生
    		Teacher t=session.get(Teacher.class, 5);
    		Student s=session.get(Student.class, 6);
    		session.delete(s);
    		
   //修改:调用属性的set方法就行啦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值