Frage

Meine Postgresql -Tabellen haben IDs vom Typ bigserial, Dies bedeutet INSERT Aussage). Ich habe Schwierigkeiten, den richtigen Wert für die zu finden <generator class="..."> Attribut in meiner XML -Zuordnungsdatei.

Der folgende Code ist der nächste, den ich gefunden habe, der für Postgres am nächsten kommt, aber er führt immer noch a SELECT nextval(...) auf der Sequenz vor dem Einfügen (und explizit den Wert des ID -Feldes in den Einfügen). Ich möchte nur, dass der Hibernate den ID -Feldwert überhaupt nicht einbezieht und Postgres ermöglicht, den Wert selbst zu generieren.

    <id name="id" column="id" type="java.lang.Long">
        <generator class="sequence">
            <param name="sequence">my_sequence_name</param>
        </generator>
    </id>
War es hilfreich?

Lösung

Dies ist undokumentiert, aber Sie können tatsächlich eine verwenden identity Generator mit PostgreSQL, wenn der PK vom Typ ist SERIAL oder BIGSERIAL:

<id name="id" column="user_id" type="java.lang.Long">
     <generator class="identity"/>
</id>

Sehen HB-875 und HHH-1675 Für den Hintergrund dazu.

Andere Tipps

Nach dem, was ich gelesen habe:

<id name="id" column="id" type="java.lang.Long">
    <generator class="sequence">
        <param name="sequence">my_sequence_name</param>
    </generator>
</id>

sollte schneller arbeiten als:

<id name="id" column="id" type="java.lang.Long">
    <generator class="identity" />
</id>

Der Sequenzgenerator fällt in die Nicht eingelagerte Poidgeneratoren so beschrieben:

Nicht eingelagerte Poid-Generatoren sind die beste Option für neue Anwendungen. Diese Generatoren ermöglichen es Nhibernate, einem anhaltenden Objekt eine Identität zuzuweisen, ohne die Daten des Objekts an Thedatabase zu schreiben, sodass NhiberNate das Schreiben verzögert, bis die Geschäftstransaktion abgeschlossen ist und Rundfahrten in die Datenbank reduziert.

Während der Identitätsgenerator ist Poid-Generatoren nach der Insertation Gruppe:

Poid-Generatoren nach der Insertation verlangen, dass Daten in die Datenbank bestehen, damit eine ID generiert werden soll. Dies verändert das Verhalten von NHiNRNATE auf sehr subtile Weise und deaktiviert einige Leistungsfunktionen. Daher ist die Verwendung dieser Poid -Generatoren stark entmutigt! Sie sollten nur mit vorhandenen Datenbanken verwendet werden, in denen sich andere Anwendungen auf dieses Verhalten verlassen.

Zitate wurden aus dem Kochbuch von NhiberNate 3.0 übernommen.

Versuchte zu folgen und es funktionierte:

<id name="id" column="id" type="long" unsaved-value="null" >
        <generator class="sequence">
            <param name="sequence">my_sequence_name</param>
        </generator>
</id>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top