Hibernate注解 many to many

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);
        }



    }

}

猜你喜欢

转载自blog.csdn.net/amazing_Code/article/details/82629088