# JPA TreeStruktur mit ManyToMany Relation



## facefab (29. Mrz 2016)

Hi, 
Ich hab folgendes Setup mit einer Baumstuktur, welche durch die Klasse TreeNode abgebildet wird.  Bei dieser Baumstruktur können die TreeNode-Objekte des Baumes, welche als Blätter auftreten ein Objekt der Klasse Device enhalten. Die Deviceobjekte können dabei auch mehreren TreeNode-Blättern zugeordnet werden. Das Problem das bei mir nun auftritt, ist dass das Deviceobjekt wissen soll, welchen (elterlichen) TreeNodes es zugeordnet ist. (Also das Parent-Objekt des Blattes, welches das Device-Objekt enthält. Diese ParentObjekte werden in der Liste "_classes_" in Device gespeichert.) 

Hier der Code von TreeNode:

```
@Id
    @GeneratedValue
    protected Long id;
    protected String name="";
   
    @ManyToOne
    protected Device device = null;
   
    @ManyToOne
    @JoinColumn(name="parent_id")
    protected TreeNode parent = null;
   
   
     @OneToMany(mappedBy="parent", fetch = FetchType.EAGER)
     protected Set<TreeNode> children = new HashSet<TreeNode>();
```

Hier der Code von Device:

```
@Id
    @GeneratedValue
    private Long id;
    protected String name="";
       
       
    @ManyToMany//(mappedBy="parent", fetch = FetchType.EAGER)
    protected List<TreeNode> classes = new ArrayList<TreeNode>();
```

Das Problem ist nun, dass mir nun beim Laden eines Deviceobjekts aus der DB entweder mehrmals dieselbe Device - TreeNode Relation gelistet wird ( für den Fall, dass  "_ protected List<TreeNode> classes_" nur mit "_@ManyToMany_" annotiert ist, oder dass gar keine Relationen gespeichert werden, (für den Fall, dass "_(mappedBy="parent", fetch = FetchType.EAGER)_" Teil der Annotation ist))


----------



## stg (29. Mrz 2016)

So wie ich dich verstehe sollte es in Devices:


```
@OneToMany(mappedBy="device", fetch = FetchType.EAGER)
protected List<TreeNode> classes;
```

Ggfls auf der anderen Seite noch die @JoinColumn definieren.


----------



## facefab (14. Apr 2016)

Vielen Dank für Deine Hilfe. Der Urlaub hat mich gerade von einer schnelleren Response abgehalten  Das mappedBy muss sich aber schon auf parent beziehen. In der Liste classes soll auf die parent-Knoten verwiesen werden (die indiesem Fall einer Geräteklasse entsprechen). Das Device-Objekt selbst wird zwar auch in einem (oder mehreren) TreeNode(s) referenziert (um es als Blatt im Baum darstellen zu können), aber davon weiss das Device-Objekt nichts. Es soll ihm nur bekannt sein, zu welchen übergerodneten Knoten (Geräteklassen) es gehört.


----------

