2017-07-17 168 views
0

我對此有點困惑。當我嘗試創建一個沒有@Id的實體時,編譯時給我一個錯誤,我必須設置主鍵使用@Id,甚至不能將應用程序部署到應用程序服務器(我使用payara)。但是官方Java EE 7教程文檔中對實體類的要求不包含實體必須具有@Id的規則。並且,該文檔中的實體定義如下:爲什麼實體類必須有@Id?

通常,實體表示關係數據庫中的表,並且每個實體實例對應於該表中的一行。

但我可以創建一個沒有主鍵的數據表。

所以我的問題是,爲什麼我們必須在實體中設置@Id。還有其他的考慮嗎?例如,使用@Id來標識持久化上下文中的特定實體,以便我們可以使用em.find(id)?如果我堅持創建一個沒有@Id的實體,我該怎麼辦?

感謝您的幫助。

回答

0

一個實體是你存儲在數據庫中的東西(我不能拿出一個你不這樣做的用例)。你存儲在數據庫表中的東西需要有一個主鍵。對於主鍵,我們通常使用Id。

我很確定你收到的警告是一些添加'你確定你沒有忘記什麼? IDE的功能,並且可以在設置中禁用。

+0

但是,當我運行該應用程序時,運行時也給了我錯誤.. lol。 – MarcuX

+0

@MarcuX你什麼時候得到錯誤?當你將實體存儲在數據庫中時?如果是這樣,你是否真的將另一個屬性定義爲主鍵? – Chrotenise

+0

正當我在payara服務器上部署應用程序 – MarcuX

1

JPA實體bean需要以某種方式指定主鍵。

JSR 338:的JavaTM持久性API,2.1版規範

2.4主鍵和實體標識

每個實體都必須有一個主鍵。

主鍵必須在作爲實體層次結構的根的實體類或實體層次結構中所有實體類的(直接或間接)超類的映射超類上定義。主鍵必須在實體層次中精確定義一次。

主鍵對應於實體類的一個或多個字段或屬性(「屬性」)。
...

相關問題