Lange gegen Integer für das ID-Feld von Java-Entitäten

8

Der Jpa-Entity-Generator weist den ID-Feldern meiner Entitäten den Integer-Typ zu. Das entsprechende Attribut / Spalte in meinem DB ist vom Typ serial (yep postgres ). Ich würde den Entitäts-ID-Feldern auch den Integer-Typ zuweisen. Aber ich habe die Verwendung von Long getId() auf dieser Seite gesehen. Ich habe auch diese Art von Typ auf den Geomajas Beispiele zugeordnet. Gibt es irgendwelche Probleme bei der Verwendung von Integer ? Ich meine, yeah, Sie müssen vorsichtig mit Integer sein, dass die ID nicht unter 0 ist, aber gleichzeitig müssen Sie auch sicherstellen, dass Ihre Long-ID nicht größer als 2.147.483.647 ist. Also, was ist hier los?

BEARBEITEN: Ich machte eine Verwechslung zwischen Long und unsigned integer, also denke ich, was ich dachte war "unsigned integer versus Integer für das ID-Feld von Java-Entities" was jetzt Unsinn ist, dass meine Verwirrung zwischen lang und vorzeichenlose ganze Zahl ist weg. Mein Fehler. Vielen Dank für Ihre Antworten und Kommentare. Ich denke, wenn ich bigserial jpa Entity Generator verwendet hätte, hätte auch Long verwendet.

    
osh 01.07.2013, 05:55
quelle

3 Antworten

7

Long hat eine viel größere Kapazität als der Datentyp Integer . Wenn Sie also nicht sicher sind, welche Länge Ihre Daten haben werden, verwenden Sie besser Long type data ...

Auf der anderen Seite, da Long eine größere Kapazität hat, wird zusätzlicher Speicherplatz benötigt und wenn Sie sicher sind, dass Ihre Daten nicht größer als der Integer Datentyp sind, macht die Verwendung von Long Ihren Code nur ineffizient

    
usmansamie 01.07.2013, 06:04
quelle
7
  

Der Jpa- Entitätsgenerator weist den ID-Feldern meiner Entitäten den Ganzzahltyp zu

Sie legen den Typ des ID-Feldes fest, der JPA-Generator füllt ihn mit eindeutigen Werten. Sie können Integer oder Long verwenden.

  

Gibt es irgendwelche Probleme bei der Verwendung von Integer?

Nicht wirklich, der einzige Unterschied zwischen Integer & amp; Long ist die Anzahl der Bits (64 v 32) und der zulässige Bereich:

%Vor%

Der Generator weist dem Id-Feld Werte zu. Sie können den initial generierten Wert steuern: Setzen Sie für @SequenceGenerator und @TableGenerator das Attribut initialValue; Ändern Sie für den Identity-Generator die DDL-Definition der Datenbank für die Identity-Spalte.

Legen Sie einfach fest (maximale Anzahl der von Ihrer App pro Woche generierten IDs) x (maximale Anzahl der Wochen, in denen Ihre App "live" sein kann). Wenn das Ergebnis weniger als sagen wir 1.500.000.000 ist (geben Sie eine Sicherheitsmarge), können Sie Integer verwenden; Ansonsten verwende Long.

    
Glen Best 01.07.2013 07:01
quelle
0

Der größte Fehler ist, dass Sie bei der Abfrage nach einer Entität den EXAKTYP oder die Implementierung mit Ausnahmefehler verwenden müssen. Und das ist eine RUNTIME-Ausnahme.

%Vor%

Ich behaupte, dass die Konsistenz zwischen Ihren Entitäten aus Gründen der Wartbarkeit genauso wichtig ist wie die Berücksichtigung von Arbeitsspeicher.

Um dieses Argument weiter voranzutreiben, bedenken Sie, dass die "Größe" die Pakete zu / von der Datenbank nicht beeinflusst.

    
Steven Spungin 27.10.2016 11:47
quelle

Tags und Links