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<CourseEntity> 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<StudentEntity> 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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

qianggetaba

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值