多对多关系一般需要三张表
关系型数据库 多对多(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语句