Course 类
@Entity
@Table(name="t_course")
public class Course extends BaseEntity {
private String name;
/*@ManyToMany(cascade=CascadeType.PERSIST)
@JoinTable(
name="undergraduate_course",
joinColumns=@JoinColumn(name="course_id"),
inverseJoinColumns=@JoinColumn(name="undergraduate_id")
)*/
@ManyToMany(mappedBy="courses")
private Set<UnderGraduate> underGraduates;
public Set<UnderGraduate> getUnderGraduates() {
return underGraduates;
}
public void setUnderGraduates(Set<UnderGraduate> underGraduates) {
this.underGraduates = underGraduates;
}
public Course() {
super();
// TODO Auto-generated constructor stub
}
public Course(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Course [name=" + name + "]";
}
}
UnderGraduate 类
@Entity
@Table(name="t_undergraduate")
public class UnderGraduate extends BaseEntity {
private String name;
//@ManyToMany
//如果直接写个ManyToMany则默认生成的中间表的名字为:当前实体类对应的表的名字_对方实体类对应的表的名字
//中间表中第一个字段为当前实体对应的表的名字_id
//中间表中第二个字段的名字为当前对象的复杂属性_id
@ManyToMany(cascade=CascadeType.PERSIST)
//指定生成中间表的名字,此时中间表中生成的字段和前面的规律一样
//如果想手工指定中间表中的字段则需要下面的操作
@JoinTable(
name="undergraduate_course",//指定生成中间表的名字
joinColumns=@JoinColumn(name="undergraduate_id"),
inverseJoinColumns=@JoinColumn(name="course_id")
)
private Set<Course> courses;
public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}
public UnderGraduate() {
super();
// TODO Auto-generated constructor stub
}
public UnderGraduate(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "UnderGraduate [name=" + name + "]";
}
}
测试类
public class HibernateDemo01 {
public static void main(String[] args) {
add();
UnderGraduate underGraduate=queryUnderGraduate(1);
System.out.println(underGraduate);
System.out.println("选修课程:");
for(Course course:underGraduate.getCourses()){
System.out.println(course);
}
System.out.println("====================");
Course course=queryCourse(1);
System.out.println(course);
System.out.println("选修这门课程的大学生:");
for(UnderGraduate graduate:course.getUnderGraduates()){
System.out.println(graduate);
}
}
private static Course queryCourse(int id) {
Session session=null;
try{
session=HibernateUtils.getSession();
Course course=(Course) session.get(Course.class,id);
Hibernate.initialize(course.getUnderGraduates());
return course;
}finally{
HibernateUtils.close(session);
}
}
/**
* 根据id查询大学生
* @param id
* @return
*/
private static UnderGraduate queryUnderGraduate(int id) {
Session session=null;
try{
session=HibernateUtils.getSession();
UnderGraduate underGraduate=(UnderGraduate) session.get(UnderGraduate.class,id);
Hibernate.initialize(underGraduate.getCourses());
return underGraduate;
}finally{
HibernateUtils.close(session);
}
}
/**
* 添加数据
*/
private static void add() {
Session session=HibernateUtils.getSession();
Transaction transaction=null;
try{
transaction=session.beginTransaction();
UnderGraduate underGraduate=new UnderGraduate("小丽");
Set<Course> courses=new HashSet<>();
Course java=new Course("Java");
courses.add(java);
Course c=new Course("C#");
courses.add(c);
underGraduate.setCourses(courses);
session.persist(underGraduate);
/*System.out.println("============");
UnderGraduate underGraduate_long=new UnderGraduate("小龙");
Set<UnderGraduate> underGraduates=new HashSet<>();
underGraduates.add(underGraduate);
underGraduates.add(underGraduate_long);
c.setUnderGraduates(underGraduates);
session.persist(c);
*/
transaction.commit();
}finally{
HibernateUtils.close(session);
}
}
}