Was ist der Unterschied zwischen @ManyToOne (optional = false) und @Column (nullable = false)?
In JPA, ich bin verwirrt, wenn Sie das Attribut verwenden optional=false
und die annotation @Column(nullable=false)
. Was ist der Unterschied?
Kommentar zu dem Problem - Öffnen
möglich dupe - stackoverflow.com/questions/2899073/... ich denke, die Diskussion gibt es für @Basic(optional=false), gilt auch für @ManyToOne(optional=false)
InformationsquelleAutor der Frage Truong Ha | 2010-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Column(nullable=false)
ist eine Anweisung für die Generierung des Schemas. Die Spalte in der Datenbank generiert, aus der Klasse gekennzeichnet werden keine null-Werte in die aktuelle Datenbank.optional=false
ist eine runtime-Anweisung. Die primäre funktionale Sache, die es tut, ist im Zusammenhang zu Lazy Loading. Sie können nicht faul laden von nicht-Sammlung zugeordnet Entität, es sei denn, Sie denken Sie daran, optional=false (weil Hibernate weiß nicht, ob es einen proxy gibt, oder eine null, es sei denn, Sie sagen es, null-Werte sind unmöglich, so kann es generiert einen proxy.)InformationsquelleAutor der Antwort Affe
Beiden wird verwendet, um zu verhindern, dass ein null-Wert, aber wenn Sie Verstand, dass null-gesperrt werden sollte ...
Den Datenbank Schicht (und Sie wollen, um das schema zu generieren mit Java Persistence API (JPA) --> verwenden
@Column(nullable=false)
Den Laufzeit (und vor der Kontaktaufnahme mit der Datenbank)--> verwenden
optional=false
(viel schneller als die erste Prüfung).Wenn Sie möchten, dass beide Fähigkeiten, verwenden Sie beide.
InformationsquelleAutor der Antwort O.Badr