sql >> データベース >  >> RDS >> Mysql

親JPAからすべての子とサブ子を取得する

    ドメインモデルでこれを処理するには、関係を双方向にし、ツリーをウォークする再帰メソッドを記述します。これの利点の1つは、あらゆるレベルの子供を処理できることです。

    これは次のようになります。その後、どのような場合でも実行できます。

    SomeEntity e = //;
    e.getChildren(); //only direct children
    e.getAllChildren(); //all children
    

    エンティティ:

    @Entity
    @Table(name = "some_entity")
    public final class SomeEntity {
    
        @Column(nullable = false, unique = true, length = 20)
        private String externalId;
    
        @Column(nullable = false, length = 50)
        private String name;
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "parentId", nullable = true)
        private SomeEntity parent;
    
        @OneToMany(mappedBy = "parent")
        private List<SomeEntity> children; //or Set<>
    
        //returns direct children
        public List<SomeEntity> getChildren(){
            return children;
        } 
    
        //returns all children to any level
        public List<SomeEntity> getAllChildren(){
            getAllChildren(this);
        }
    
        //recursive function to walk the tree
        private List<SomeEntity> getAllChildren(SomeEntity parent){
            List<SomeEntity> allChidren = new ArrayList<>();
    
            for(SomeEntity child : children){
                allChildren.add(child);
                allChildren.addAll(getAllChildren(child);
            }
    
            return allChildren;
        }
    }
    



    1. 最初のデータベースの作成にアクセスが拒否されました-正しいアクセスを許可するにはどうすればよいですか?

    2. JDBCが正しいステートメントでMySQLSyntaxError例外を返す

    3. 不明な列数でのSQLServer2005のピボット

    4. MariaDBでのFLOOR()のしくみ