Ich verwende zwei Tabellen für mein aktuelles Projekt (es wird sicherlich wachsen).
Die erste Tabelle hat eine Vielzahl von Spalten, z.B.
id|name|surname|age|token |currentpackage|difference
1 |me | you | 22|xc2e2144124sd |100 |0
Zweite Tabelle:
id|mirror|token| connsize|price
81|server|xc2e2144124sd|100mbps |1000
Diese Tabellen sind voll von Daten. Es gibt einige Zeilen in Tabelle 1, die denselben Token-Wert haben wie die in Tabelle 2.
Ich habe schon lange nach einer Lösung gegoogelt, dies ist die beste, die ich gefunden habe:
http://www.mkyong.com/hibernate/hibernate-one-to-one-relationship-example/ y http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-one-to-one-1.html
Aber ich glaube nicht, dass dies auf meinen Fall zutrifft (oder doch?). In diesen Beispielen ist die Beziehung der Schlüssel, der inkrementell ist, mein Token ist einfach so, wie es in der Datenbank ist.
Mein endgültiges Ziel ist es, die Differenz zwischen aktueller Verpackung und Preis zu berechnen
Was würden Sie in diesem Fall empfehlen? Ich benutze java/hibernate/spring
Gibt es eine andere Möglichkeit, Hibernate zu sagen, dass die Verknüpfung über etwas anderes als den Primärschlüssel erfolgen soll? Ein benutzerdefinierter Schlüssel wie Token in Tabelle 1? Token ist eine Art Beziehung zwischen Tabelle 1 und Tabelle 2. Es sind viele (Tabelle 1) zu einer (Tabelle 2).
LETZTES UPDATE
Ich versuche es mit Hilfe einer Abfrage, um diese beiden Spalten zu subtrahieren:
UPDATE packages tl
SET difference = (select (t2.price-t1.currentpackage)
from packages t1, mirrors t2
where t2.token= t1.token)
Ich habe diese Fehlermeldung erhalten:
ERROR: more than one row returned by a subquery used as an expression
Ich muss viele Optionen ausprobiert haben, aber keine hat funktioniert.
Das habe ich auch schon versucht, mit dem gleichen Ergebnis:
UPDATE packages X
SET difference = (select Y.price-X.currentpackage
FROM packages X
LEFT OUTER JOIN mirrors Y
ON Y.token = X.token)
Dies scheint das zu sein, wonach ich suche, aber ich kann es nicht in meine Abfrage einbauen: