Ich verwende den Tabellengenerator, um Primärschlüssel für alle Tabellen zu generieren. Kürzlich erhielt ich eine Anforderung, die ich brauche, um die inkrementierte ID programmatisch zu erhalten, ohne die Entität in der Datenbank zu behalten. Ich glaube, es kann erreicht werden, indem interne interne Hibernate API aufgerufen wird. Wie auch immer wissen, wie man die inkrementierte ID programmatisch mit Hibernate bekommt?Hibernate wird programmatisch inkrementiert ID
Antwort
Ich schaute in NHibernat Code (sicherlich funktioniert es für Hibernate das gleiche). Sie können den ID-Generator aufrufen, aber das wird nicht viel helfen, da die generierte ID beim Speichern eines Objekts nicht verwendet wird.
Dies ist etwas, das konzeptionell nicht funktioniert. Sie können nicht veranlassen, dass ein System automatisch IDs generiert und diese außerhalb der Speicherprozedur zur selben Zeit generiert.
Dies sind die Optionen, die mir in den Sinn kommen:
- Verwenden ID-Generator „zugewiesen“ und erzeugen die IDs selbst. Nur so können Sie eine ID zuordnen, die vor dem Speichern definiert wurde. (Beachten Sie, dass es nicht trivial ist, eindeutige Zahlen in einem System von gleichzeitigen Transaktionen zu generieren.) Es ist nicht sehr komfortabel für Ihren Code, wie Sie sehen werden.
- Fragen Sie die Anforderung. Sobald ein Objekt für den Benutzer identifiziert wurde, sollte es nicht persistent sein?
- Ziehen Sie in Betracht, die sichtbare ID vom Primärschlüssel zu trennen. Es kann ein Overkill sein, zu IDs im System zu haben, nur um vor dem anderen definiert zu haben, aber ansonsten entkoppelt es Ihre Primärschlüssel von Benutzerdaten. Sie können aus technischen Gründen zu anderen ID-Generatoren wechseln, ohne die Anforderungen zu erfüllen. (Ähnlich wie bei dem ersten Punkt, aber nicht mit Primärschlüssel Messing mehr.)
Ich muss dies implementieren, weil ich eine laufende Nummer brauche, um den Code zu konstruieren, der später in der Datenbank bleiben wird. z.B. US-ABC-1000001 und ich möchte dafür keine Sequenznummer erstellen. – kenn3th
Wenn Sie es wie beschrieben haben möchten, müssen Sie entweder einen zuweisbaren Primärschlüssel haben oder den "US-ABC-1000001" -Teil vom Primärschlüssel trennen. In beiden Fällen müssen Sie die Sequenznummer selbst verwalten. Sie können wahrscheinlich Hibernate ID-Generatoren dafür verwenden. ID-Generatoren haben normalerweise nicht viel Code und Sie könnten es auch selbst implementieren. –
- 1. Laravel - Update inkrementiert die ID?
- 2. Wann wird Int ++ inkrementiert?
- 3. Id auto inkrement varchar nicht inkrementiert
- 4. Warum wird der Zähler inkrementiert?
- 5. Xcode UIProgressBar wird nicht inkrementiert
- 6. Hibernate wird ID-Spaltenname nicht festlegen
- 7. Identität inkrementiert nur wenn Datensatz eingefügt wird
- 8. Wie wird ein Datensatz in Firebase inkrementiert?
- 9. Wie wird inkrementiert basierend auf einer Variablen
- 10. Warum wird der Zeiger nicht inkrementiert
- 11. Java Hibernate ID Autoinkrement
- 12. Hibernate ID Generator
- 13. MySQL Load Data Infile automatisch inkrementiert ID-Wert
- 14. MFC: Button ID abrufen programmatisch
- 15. auto_increment nicht mehr inkrementiert
- 16. EF6 CodeFirst My [Schlüssel] ID Spalte wird nicht automatisch inkrementiert, da eine Identitätsspalte
- 17. Ich füge ein Textfeld dynamisch über jQuery und ID des Textfelds wird nicht inkrementiert
- 18. JPA mit Hibernate 5: erstellen programmatisch EntityManagerFactory
- 19. Hibernate JPA-Sequenz (Nicht-ID)
- 20. H2-Schema in Hibernate programmatisch neu erstellen
- 21. Hibernate: get-Einheit durch ID
- 22. Hibernate - Wie ID manuell generieren?
- 23. Benutzerdefinierter @ Id-Generator ohne Hibernate
- 24. Vector Iterator nicht inkrementiert
- 25. Stoppuhr nicht inkrementiert
- 26. @Id Annotation in JPA und Hibernate
- 27. iOS Touch ID-Einstellungen programmatisch öffnen
- 28. Wie programmatisch Anrufer-ID auf Android
- 29. Datum wird nicht in WHILE oder FOR-Schleife inkrementiert
- 30. statische Variable wird nicht beim Aufruf der Funktion inkrementiert
http://stackoverflow.com/questions/11788483/hibernate-rundown-on-how-generatedvalue-works – ares
Aber es erklärt nicht auf Wie bekomme ich die ID programmatisch? – kenn3th
Sie müssen lediglich die Annotation "@ GeneratedValue" über Ihr ID-Feld hinzufügen, und der Ruhezustand wählt automatisch die am besten geeignete Methode zum Generieren von IDs aus. – ares