• 多对多查询方式的一种写法


    Student 和 teacher 是多对多的关系:

    /**

    *class Student

    */

    @Entity
    @Table(name = "students")
    public class Student {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        protected Integer id;
        @Column(length = 50, nullable = false)
        protected String name;
        @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)
        @JoinTable(name = "studentteacher", joinColumns = { @JoinColumn(name = "sid",nullable=true) }, inverseJoinColumns = {
                @JoinColumn(name = "tid",nullable=true) })
        protected List<Teacher> teachers = new ArrayList<Teacher>();

        public Student() {
        }
      set / get ...
    }

    /**

    *class Teacher

    */

    @Entity
    @Table(name = "teachers")
    public class Teacher {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer id;
        @Column(length = 50, nullable = false)
        private String name;
        private Integer age;
        @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
        @JoinTable(name = "studentteacher", joinColumns = { @JoinColumn(name = "tid",nullable=true) }, inverseJoinColumns = {
                @JoinColumn(name = "sid",nullable=true) })
        private List<Student> students = new ArrayList<Student>();

        public Teacher() {

        }

      set / get ...
    }

    根据老师查找所有学生的方法可以如下:

    @PersistenceContext
    private EntityManager entityManager;

    public List<Student> getMyStudent(Teacher teacher) {
            Integer tid=teacher.getId();
            return entityManager.createQuery("select s from Student s inner join s.teachers as t  where t.id = :tid")
                    .setParameter("tid", tid).getResultList();
        }

  • 相关阅读:
    NYOJ47 过河问题
    CodeForces1165
    LuoGuP3667
    ZROI#958
    ZROI#957
    KMP小结
    LuoGuP2742[模板]二维凸包
    ZROI#999
    ZROI#997
    ZROI#996
  • 原文地址:https://www.cnblogs.com/ly-radiata/p/4747931.html
Copyright © 2020-2023  润新知