sql >> Database >  >> RDS >> Mysql

Alle kinderen en subkinderen ophalen van ouder JPA

Je kunt dit in het domeinmodel aanpakken door de relatie bidirectioneel te maken en een recursieve methode te schrijven om door de boom te lopen. Een voordeel hiervan is dat het kinderen van elk niveau aankan.

Dit zou er ongeveer zo uitzien als hieronder en dan kun je voor elk geval het volgende doen:

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

Entiteit:

@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. bij het initialiseren van PDO - moet ik doen:charset=UTF8 of charset=UTF8MB4?

  2. De dynamische tabbladen presenteren dezelfde records

  3. SQL Server 2000-equivalent voor OP DUPLICATE KEY?

  4. Meerdere rijen ophalen uit een opgeslagen functie met oracle