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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值