JAvaのormフレームワークebean多対多関係多表クエリー

3343 ワード

多対多関係は一般的に3枚の表が必要です
リレーショナル・データベースの多対多(many to many)リレーショナルの3つのテーブルか2つのテーブルか
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 scon sc.stunum(name値)=student(現在のエンティティテーブル)を意味する.stunum(referencedColumnName値、@Id注記が必要)inverseJoinColumnsはcourseテーブルからcourse join sc on sc.coursenum(name値)=course.coursenum(referencedColumnName値、courseエンティティテーブルに@Id注記が必要)の間に、複数対の複数の関係を接続するテーブルscは、エンティティクラスを確立せずにstudentとcourseが複数対の複数の関係であることを示すために、2つのフィールドしか存在しない
//course   
    @Id
    private String coursenum;

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

エンティティは主に多対多の関係を構成する2つのエンティティ属性で、注記
//    
        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