JPA - HashMap mit Many-to-Many Relation Problem

pokisto

Mitglied
Hallo zusammen,

Vorher habe ich Arraylist statt HashMap mit Hibernate gespeichert. Es hat wunderbar mit folgende Annotation geklappt.

Java:
	@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(name="join_node_edge",
			joinColumns={@JoinColumn(name="nodeID")},
			inverseJoinColumns={@JoinColumn(name="edgeID")})
	public List<Edge> getEdges() {
		return edges;
	}


Aber ich brauche jetzt HashMap und es funktioniert nicht mehr mit vorherigen Annotation .

Node.java
Java:
@Entity
public class Node implements Serializable{

        private String nodeID;
	private Map<String, Edge> edges = new HashMap<String, Edge>();
         ....

	@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(name="join_node_edge",
			joinColumns={@JoinColumn(name="nodeID")},
			inverseJoinColumns={@JoinColumn(name="edgeID")})
	public Map<String, Edge> getEdges() {
		return edges;
	}
   
        ....
}


Edge.java
Java:
@Entity
public class Edge implements Serializable{

        private String edgeID;
	private Map<String, Node> nodes = new HashMap<String, Node>();
        ....

  	@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(name="join_node_edge",
			joinColumns={@JoinColumn(name="edgeID")},
			inverseJoinColumns={@JoinColumn(name="nodeID")})
	public Map<String, Node> getNodes() {
		return nodes;
	}

        ....

Hat jemand Idee, wie man mit Many-to-Many Relation und HashMap umgehen kann?

Besteht eine Möglichkeit, HashMap-Schlüssel in Datenbank zu speichern?
 

bluer

Aktives Mitglied
Wie es aussieht möchtest du ein Graphentheoretisches Programm schreiben und in deiner Hashmap zu jeder Kante die inzidenten Knoten speichert und umgekehrt. Wozu benötigst du hier eine HashMap. Jede Kante und jeder Knoten ist doch eindeutig über sein ID identifizierbar und kann somit über die DB abgerufen werden. Somit könntest du es doch bei einer normalen Liste belassen?!
 

pokisto

Mitglied
Damit ich die Knoten und Kanten schnell vergleichen und suchen kann, verwende ich statt ArrayList HashMap.

z.B. "containKey(String id)"
 

pokisto

Mitglied
Node.java
Java:
        ....
	@ManyToMany
	public Map<String, Edge> getEdges() {
		return edges;
	}
        ....


Edge.java
Java:
        ....
	@ManyToMany
	public Map<String, Node> getNodes() {
		return nodes;
	}
        ....

Mit der obigen Annotation kann das Problem mit Many-To-Many Relation gelöst werden :)

Es wird dann 4 Tabellen automatisch generiert

1. node - Tabelle
2. edge - Tabelle
3. node_edge - Tabelle
4. edge_node - Tabelle
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben