Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mendapatkan semua anak dan subanak dari induk JPA

Anda dapat menangani ini dalam model domain dengan membuat hubungan dua arah dan menulis metode rekursif untuk berjalan di pohon. Salah satu keuntungannya adalah ia akan menangani anak-anak hingga tingkat apa pun.

Ini akan terlihat seperti di bawah ini dan kemudian untuk contoh apa pun yang dapat Anda lakukan:

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

Entitas:

@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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat database mysql dengan sekuel (nodejs)

  2. Sistem pengaturan ulang kata sandi di PHP

  3. Bagaimana cara mendapatkan baris acak untuk hari ini?

  4. Bagaimana saya bisa menghasilkan kueri SQL menggunakan SQL::Abstract?

  5. Bagaimana cara membuat beberapa LEFT JOIN dengan ATAU sepenuhnya menggunakan indeks komposit? (bagian 2)