Treetable (rekursive Funktion) aufbauen von Datenbank

beta20

Top Contributor
Hallo zusammen,

Ich habe die folgende Klasse (Entity):

Java:
@Entity
@Table(name = "branch", indexes = { @Index(columnList = "branch_id, id_hash, status, delete_flag") })
public class Branch implements Serializable {

    private static final long serialVersionUID = 1L;

    public static final Long NO_ID = Long.valueOf(0);

    @Id
    @GeneratedValue(generator = "branch_id_seq", strategy = AUTO)
    @SequenceGenerator(name = "branch_id_seq", sequenceName = "branch_branch_id_seq", allocationSize = 1)
    @Column(name = "branch_id", nullable = false)
    private Long id = NO_ID;

    // ID Hash (für URL)
    @NotNull
    @Size(max = Constants.SIZE_MAX_STRING)
    @Column(name = "id_hash", length = Constants.SIZE_MAX_STRING, nullable = false)
    private String idHash;

    // Status des Beitrags
    @NotNull(message = "Bitte ein Status angeben")
    @Size(max = Constants.SIZE_MAX_STRING)
    @Column(name = "status", length = Constants.SIZE_MAX_STRING, nullable = false)
    private String status = BranchStatus.ACTIVE.toString();

    public enum BranchStatus {
        ACTIVE, // Aktiv
        INACTIVE, // Inaktiv
        DRAFT, // Entwurf
        DECLINE, // Gesperrt
    }

    // Level
    @Column(name = "tree_level", nullable = true)
    private int treeLevel = 0;
   
    // Parent
    @ManyToOne
    @JoinColumn(name = "parent_branch_fk")
    private Branch parentBranch;
   
    // Children
    @OneToMany(mappedBy = "parentBranch", cascade = { PERSIST, MERGE, REMOVE, REFRESH })
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Branch> childrenBranch;

Nun würde ich gerne meine Hierarchy aufbauen.
Also Root (bzw. oberste Ebene können mehrere sein)...
Ich möchte allerdings nur diese, die aden Status ACTIVE haben....

Frage:
1) Soll ich zunächst alle Branch (die aktiv sind) mir aus der Datenbank holen und dann die Hierarchy aufbauen?
2) Wie sieht die rekursive Methode aus?

Wichtig:
Ich verwende Primefaces und muss die "Branch" Entity dann noch "umwandeln" in ein TreeNode Objekt....

Hier ein Ansatz der Methode, was aber nicht 100% funktioniert...

Java:
public void init() {
        Branch root = new Branch(); // instead get root object from database
        rootNode = newNodeWithChildren(root, null);
    }
   
   
   
     /**
     *  recursive function that returns a new node with its children
    */
    public TreeNode newNodeWithChildren(Branch ttParent, TreeNode parent){
         TreeNode newNode= new DefaultTreeNode(ttParent, parent);
         for (Branch tt : ttParent.getChildrenBranch()){
              TreeNode newNode2= newNodeWithChildren(tt, newNode);
         }
         return newNode;
    }

Danke für jede Hilfe..
 
Müsste er nicht den erstellten Node nicht noch dem Parent hinzufügen? Wäre mein spontaner Gedanke.

Java:
public TreeNode newNodeWithChildren(Branch ttParent, TreeNode parent){
         TreeNode newNode= new DefaultTreeNode(ttParent, parent);
         List<TreeNode> children = newNode.getChildren();

         for (Branch childBranch : ttParent.getChildrenBranch()){
              children.add(newNodeWithChildren(childBranch, newNode));
         }

         return newNode;
    }
 

Zurück
Oben