2017-09-20 4 views
1

Ich habe eine Entität in meinem Java-Code wie dieseim Zusammenhang mit mir selbst aus der Datenbank mit Hibernate

public class Point{ 

    private Float Lat; 

    private Float Long; 

    List<Point> neighbors; 

}; 

Also ich diese Informationen in einer Datenbank bestehen bleiben soll. Meine Idee war, Hibernate zu verwenden und zu vergessen, die Tabellen und die Beziehungen zu erstellen. Offensichtlich muss die Liste <> Nachbarn eine neue Tabelle für die Beziehung erstellen.

Diese Information muss von einem Webdienst in Orden abgerufen werden, um den kürzesten Pfad zwischen zwei Punkten als Diagramm zu finden.

Also ich weiß nicht, wie es das intern funktioniert. Wenn ich einen Punkt X von der Datenbank abrufe, hat Hibernate den Verweis von X und wird die Punkte der Listennachbarn abrufen, falls sie benötigt werden. Aber diese Punkte in der Liste, muß ich die Punkte, die in dieser Liste sind, und so weiter ...

Als

Y = X.neighbours.elementAt[i]. 
Y.neighbours.elementAt[j].doSomeStuff... 

In orden alle um die Grafik zu decken, den kürzesten Weg finden .

Ist dies mit dem Framework möglich?

Und, wie kann ich die Datenbank mit einem SQL-Skript laden.

Als

INSERT INTO POINT VALUES.... 

INSERT INTO NEIGHBOURS VALUES... 

Welche syntaxis sein wird?

Antwort

1

Ja, Sie müssen nur Ihre Liste für ein Set und wo es sich ändern:

<set name="neighbors" table="point_table" cascade="all" fetch="join" lazy="false"> 
    <key> 
     <column name="id"/> 
    </key> 
    <one-to-many class="package.Point"/> 
</set> 

dies tun, wenn Sie einen Punkt von db nehmen, wird es mit ihr verbundenen Punkte

+0

Thx haben! Das war genau das, was ich brauche! Und das ist für alle Punkte getan? Ich meine, ich nehme einen Punkt, also nehme ich das Set <> für diesen Punkt auf, das mehr Punkte hat, also auch die Menge dieser Punkte abrufen? – LauSikh

+0

Ja, jeder Punkt kommt mit ihren verwandten Punkten, so dass Sie vorsichtig sein müssen mit zyklischen Referenzen – Aldeguer

+0

So löst dies meine zweite Frage aus. Stellen Sie sich eine Grafik mit 500 Punkten vor (um eine Zahl zu sagen, könnte 1 Million sein). Das bedeutet, dass ich alle diese Punkte in meinem Web-Service gespeichert habe. Ist das ratsam? Oder die faule Eigenschaft machen Hibernate die Punkte nur in dem Moment abrufen, die ich brauche? Diese andere Frage auslösen, ist ratsam, viele Interaktionen mit der DB zu haben, um nach jedem Punkt zu suchen? – LauSikh

Verwandte Themen