java的orm框架 ebean 多对多关系 多表查询

多对多关系一般需要三张表

关系型数据库 多对多(many to many)关系 三表还是两表

student 学生表
course 课程表
sc 选课表

//student实体
    @Id
    private String stunum;

    @ManyToMany
    @JoinTable(name="sc",
    joinColumns=@JoinColumn(name="stunum", referencedColumnName="stunum"),
    inverseJoinColumns = @JoinColumn(name="coursenum",referencedColumnName="coursenum"))
    public List courseEntities;

joinColumns意思 join sc on sc.stunum(name值) = student(当前实体表).stunum(referencedColumnName值,需要被@Id注解)
inverseJoinColumns意思是 从course表连接回来
course join sc on sc.coursenum(name值) = course.coursenum(referencedColumnName值,course实体表中需要被@Id注解)
中间,连接多对多关系的表sc可以不建立实体类,只起到表明student与course是多对多关系,里面可以只有两个字段

//course实体类
    @Id
    private String coursenum;

    @ManyToMany
    @JoinTable(name="sc",
            joinColumns=@JoinColumn(name="coursenum",referencedColumnName = "coursenum"),
            inverseJoinColumns = @JoinColumn(name="stunum", referencedColumnName="stunum"))
    public List studentEntities;

实体主要是配置多对多关系的两个实体属性,注解

//多表联查
        StudentEntity student = StudentEntity.find.query()
                .where().eq("stunum", "1999231424")
                .findOne();

        System.out.println(student.courseEntities.size());
        for (CourseEntity course:student.courseEntities){
            System.out.println(course.getName());
        }

因为属性是public,所以可以直接获取,ebean会根据实体的注解,执行相应的多对多查询sql语句

完整项目参看码云项目:springboot-ebean

你可能感兴趣的:(ebean)