Ich arbeite an einer Hibernate / Spring-Anwendung, um einige Filme zu verwalten.
Der Klassenfilm hat eine viel zu viele Beziehung mit dem Klassengenre. Beide Klassen haben IDs mit der Annotation "GeneratedValue" generiert.
Das Genre wird über das Movie-Objekt mithilfe von @Cascade (CascadeType.SAVE_UPDATE) gespeichert. Ich habe dem type-Attribut des Genres eine besondere Einschränkung auferlegt (zum Beispiel "Fantasy").
Was ich jetzt tun möchte, ist Hibernate zu überprüfen, ob es bereits ein Genre mit dem Typ "Fantasy" gibt und falls ja, benutze die ID dieses Genres, anstatt zu versuchen, einen neuen Rekord einzufügen. (Letzteres würde offensichtlich einen Fehler werfen)
Schließlich brauche ich etwas wie "Auswahl vor dem Update", aber eher "Wählen Sie vor dem Speichern".
Gibt es eine solche Funktion in Hibernate?
Irgendein Code:
Filmklasse
%Vor%Genreklasse
%Vor%Vielleicht überlegst du das. Jede Auswahl-vor-Aktualisierung / Auswahl-vor-Speichern-Option führt zu 2 DB-Rundreisen, die erste für die Auswahl und die zweite für die Beilage, falls erforderlich.
Wenn Sie wissen, dass Sie von Anfang an nicht viele Genres haben werden, haben Sie einige Möglichkeiten, dies in 1 RT die meiste Zeit zu tun:
Wenn Sie jedoch nicht von vielen Transaktionen sprechen, wird eine realistische Vorabfrage vor dem Speichern / Aktualisieren Ihre Leistung nicht beeinträchtigen.
Ich habe noch nie von einer solchen Funktion im Ruhezustand gehört. Wählen Sie-vor-Aktualisierung / Auswahl-vor-Speichern In Situationen wie diesen sollten Sie Hibernate so behandeln, als wäre es JDBC.
Wenn du zuerst wissen willst, ob du überhaupt ein solches Genre hast, solltest du danach fragen.
wenn Sie es tun. Das SAVE_UPDATE erstellt dann kein neues, wenn Sie es zu einem Film hinzufügen. Wenn Sie dies nicht tun, erstellt Hibernate eine neue Genre-Zeile in der Datenbank und fügt die Verbindung zur Tabelle many_to_many für Sie hinzu.