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方法就行啦