hibernate3.x
一、注解相关
一对多中的一
@Table(name="t_class_room")
@Entity
class ClassRoom{
private Integer id;
private String name;
//重点 这里的mappedBy写的是一对多中 多的一方(Student.class)中的与该类关联的字段名
@OneToMany(mappedBy="classRoom",targetEntity=Student.class)
private Set<Student> students;
}
一对多中的多
@Table(name="t_student")
@Entity
class Student{
private Integer id;
private String name;
//name是该类映射表中保存关联字段的列名 referencedColumnName是一对多中 一的一方(ClassRoom.class)中的字段名 注意:name对应的是数据库列名 referencedColumnName对应的是类的字段名
@ManyToOne
@JoinColumn(name="class_room_id",referencedColumnName="id")
private ClassRoom classRoom;
}
二、查询相关
关联查询时注意fetch hql语句from ClassRoom cr inner join fetch cr.students s where s.name = '小明'
当查询条数时不要加fetch hql语句select(cr) from ClassRoom cr inner join cr.students s where s.name='小明'
当要查询某一个班级中的所有学生时,就直接查询这个班级 hql语句from CalssRoom where id = 1 这个应该和hibernate的抓取策略相关具体还要深入理解
三、增删改(这个和hibernate的级联操作相关,这里注解@OneToMany/@ManyToOne中没有声明级联操作)
目前只用过新增
新增一个ClassRoom 创建对象设置对象属性值然后保存
新增一个Student 创建对象设置对象数据然后设置ClassRoom类型的字段 这个在保存到数据库时表class_room_id列就会用这个对象的id字段