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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java关系映射多对多是指在Java中使用关系型数据库时,一种表与表之间的关联关系。在多对多关联中,一个实体可以与多个其他实体关联,反之,一个实体也可以被多个其他实体关联。在Java中,可以通过使用ORM框架如Hibernate、MyBatis等实现多对多关系的映射。 在Hibernate中,多对多关系映射需要通过中间表来实现。中间表可以包含两个外键,分别指向两个相关联的表。在Java代码中,可以通过定义两个实体类之间的多对多关系来实现多对多关系的映射。 举例来说,如果我们有两个表student和course,它们之间是多对多关系(一个学生可以选择多门课程,一门课程也可以被多个学生选修),那么我们需要创建一个中间表来保存这种关系,如下: ``` CREATE TABLE student_course ( student_id INT NOT NULL, course_id INT NOT NULL, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES student(id), FOREIGN KEY (course_id) REFERENCES course(id) ); ``` 然后,在Java代码中,我们需要定义两个实体类Student和Course,并在它们之间定义多对多关系: ``` @Entity @Table(name = "student") public class Student { @Id private Long id; @ManyToMany @JoinTable( name = "student_course", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "course_id") ) private Set<Course> courses; //... } @Entity @Table(name = "course") public class Course { @Id private Long id; @ManyToMany(mappedBy = "courses") private Set<Student> students; //... } ``` 通过以上代码,我们就可以实现Java关系映射多对多。如果你有其他问题或者需要更详细的介绍,请告诉我。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值