2010-02-25 13 views

Antwort

12

Sie werden beide auf den gleichen Spaltentyp abgebildet. Aus einer Gedächtnisperspektive wäre ein Primitiv wahrscheinlich ein wenig leichter, aber der Unterschied wird mit ziemlicher Sicherheit vernachlässigbar sein. Ich denke, ein Primitiv würde es nicht nullfähig machen, aber Sie könnten das auch mit einer Anmerkung machen.

+0

Danke, ich werde mit dem Java-Datentyp bleiben, um eine spezielle Behandlung von Nullen zu vermeiden – Sam

9

Kalebs Recht - wenn irgendwelche Abfragen einen Nullwert für "enabled" (in diesem Fall) zurückgeben, dann müssen Sie das Objekt und nicht das Primitive verwenden.

Dies ist aus dem Ruhezustand FAQ:

A PropertyAccessException oft auftritt, wenn das Objekt in der Set-Methode übergeben wird vom falschen Typ ist. Überprüfen Sie Ihre Typzuordnungen für die beanstandete Eigenschaft. (Um genau zu sehen, welche Eigenschaft das Problem war, müssen Sie möglicherweise das CGLIB-Reflektionsoptimierer deaktivieren.) Die häufigste Ursache dieses Problems ist jedoch, dass Hibernate versucht hat, einer Eigenschaft des primitiven Typs null zuzuweisen.

Wenn für Ihr Objekt eine Eigenschaft vom primitiven Typ einer nullbaren Datenbankspalte zugeordnet ist, müssen Sie einen benutzerdefinierten Hibernate-Typ verwenden, um einen vernünftigen Standardwert für den Fall eines Nullspaltenwerts zuzuweisen. Eine bessere Lösung ist normalerweise die Verwendung eines Wrappertyps für die Java-Eigenschaft.

https://www.hibernate.org/116.html

20

ich in der Regel vorschlagen würde, die primitiven Typen verwenden, erhalten nur von null Kontrollen befreien alle über den Ort. Aber es hängt wirklich davon ab, was du sagen willst. Ihre Boolesche jetzt können 3 Werte halten:

  1. wahr
  2. falsch
  3. null

Und null kann insgesamt neue semantische machen, wenn sie mit Entitäten zu tun. Ich benutze es normalerweise als "Keine Daten verfügbar". Ihr "aktiviert" könnte ein schlechtes Beispiel für diese Art von Feld sein. Aber sagen wir, Sie haben eine Nummer, die das Alter einer Person hält.

private Integer age; 

Wenn Sie null verwenden, können Sie dies wie folgt behandeln: "Unbekannt". Sie könnten auch einen int verwenden und einen speziellen Wert (-1) für diesen Fall definieren, aber Null ist die natürlichere Lösung.

Also, um es zusammenzufassen. Verwenden Sie Primitive, wenn es immer einen sinnvollen Wert (erforderliche Felder?) Und Wrapper-Klassen für optionale Werte gibt.

Verwandte Themen