2010-07-26 93 views

回答

67

@Column(nullable=false)是用於生成模式的指令。在該類中生成的數據庫列在實際數據庫中將被標記爲不可空。

optional=false是一個運行時指令。它所做的主要功能與延遲加載有關。除非你記得設置optional = false(因爲Hibernate不知道應該有一個代理還是一個null,除非你告訴它空值是不可能的,所以它可以產生一個非集合映射實體代理)

+8

另一個有趣的事實是,大多數持久性提供程序使用「可選」參數給出的信息在運行時優化查詢。例如加載實體時。因此,使用optional = false指定的實際實體的所有關係在加載時會導致INNER JOIN到它們各自的關係,而使用optional = true指定的關係會導致LEFT JOIN。 – Lars 2016-01-25 21:47:32

0

兩個是用來防止空值,但如果你介意空應...

數據庫層被封鎖(你想生成使用JPA的架構) - >使用@Column(nullable=false)

運行時(和聯繫數據庫之前) - >使用optional=false (比第一次檢查快得多)。

如果你想要兩種能力,請同時使用它們。

+0

這個答案補充說沒有說過了嗎? – Kawu 2017-05-11 14:20:28

+0

**運行時檢查** null和**性能首選項** – 2017-05-11 18:28:36

+0

運行時事實已由Affe處理:「可選= false是運行時指令」。 – Kawu 2017-05-15 12:47:31

相關問題