Hallo alle zusammen,
ich sitze gerade an einem interessanten Problem:
Ich habe zwei Tabellen: file und file_fingerprint (bzw. zwei Klasse FileEntry und FileFingerprint). Nun kann sich der Fingerabdruck einer Datei ändern und die Datei selber gelöscht werden. Nun kann ich aber nicht gleich den Fingerabdruck löschen, da ja auch noch andere Dateien auf ihn verweisen könne. Bzw. während des Scanvorgangs von Dateien kann es ja auch sein, dass eine andere Datei diesen besitzt (bspw. beim Verschieben einer Datei). Sprich ich muss am Ende eines Scanvorgangs die verwaisten Fingerabdrücke löschen. In reinem SQL hätte ich mit
mir eine Liste der Fingerabdrücke von der Datenbank geben lassen und diese dann gelöscht. Nach viel rumprobieren ist das einzige, was bei mir in Hibernate funktioniert hat, folgende Abfrage gewesen:
Nun wäre meine Frage, ob es dafür etwas schöneres als die Lösung mit dem Subselect gibt. Irgendwas in der Form:
Das funktioniert natürlich nicht und Hibernate gibt zu recht den Fehler
aus. Würde ich jedoch den Pfad angeben, würde ich die Tabelle file_fingerprint zweimal referenzieren, was nicht Sinn der Sache ist.
ich sitze gerade an einem interessanten Problem:
Ich habe zwei Tabellen: file und file_fingerprint (bzw. zwei Klasse FileEntry und FileFingerprint). Nun kann sich der Fingerabdruck einer Datei ändern und die Datei selber gelöscht werden. Nun kann ich aber nicht gleich den Fingerabdruck löschen, da ja auch noch andere Dateien auf ihn verweisen könne. Bzw. während des Scanvorgangs von Dateien kann es ja auch sein, dass eine andere Datei diesen besitzt (bspw. beim Verschieben einer Datei). Sprich ich muss am Ende eines Scanvorgangs die verwaisten Fingerabdrücke löschen. In reinem SQL hätte ich mit
Code:
SELECT ff.id FROM file_fingerprint ff
LEFT OUTER JOIN file f ON (f.fingerprint = ff.id)
WHERE (f.id IS NULL);
Code:
FROM FileFingerprint AS fp
WHERE (NOT EXISTS(FROM FileEntry AS fe WHERE (fe.fingerprint = fp)))
Code:
FROM mcp.database.FileFingerprint AS fp
LEFT OUTER JOIN FileEntry AS fe WHERE (fe.id IS NULL)
Code:
[error] Path expected for join!