Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pobieranie wszystkich dzieci i dzieci od rodzica JPA

Można to obsłużyć w modelu domeny, tworząc relację dwukierunkową i pisząc metodę rekurencyjną do chodzenia po drzewie. Jedną z zalet jest to, że poradzi sobie z dziećmi na każdym poziomie.

Wyglądałoby to mniej więcej tak, jak poniżej, a następnie w każdym przypadku, który możesz zrobić:

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

Podmiot:

@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. Preferowana metoda dla widoków zmaterializowanych (tabele podsumowujące) z MySQL

  2. Jak tworzyć gotowe zestawienia za pomocą mysql2 gem?

  3. Proste zapytanie wybierające MySQL działa wolno

  4. Jak mogę dodać ograniczenie ON DELETE na stole?

  5. SQL:UPDATE ze złożonego wyboru