Mysql
 sql >> база данни >  >> RDS >> Mysql

Получаване на всички деца и подчинени от родител JPA

Можете да се справите с това в модела на домейна, като направите връзката двупосочна и напишете рекурсивен метод, който да върви по дървото. Едно предимство на това е, че ще се справи с деца на всяко ниво.

Това ще изглежда нещо като по-долу и след това за всеки случай, който можете да направите:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Активирайте Entity Framework 6 за MySql (C#) в WinForms на Microsoft Visual Studio 2013

  2. Защо да използвате рамки? Убедете ме, че трябва да разбера Zend Framework и да го използвам

  3. Актуализиране на редове въз основа на други редове в същата таблица

  4. Най-добрият начин за съхраняване на времеви интервал в MySQL база данни?

  5. MySql.Data.MySqlClient.MySqlException:„Локалният хост не поддържа SSL връзки.“