2010-07-05 200 views
10

我有一個沒有主鍵的MySQL表,我必須將它映射到一個JPA實體。我無法以任何方式修改表格。沒有主鍵的表的JPA實體

由於實體必須有一個主鍵,我必須指定一個。如果我確定我在實體中使用的字段(或字段,我應該選擇使用複合主鍵)在表中始終是唯一的(而不是空),那麼表可以實現沒有在CREATE TABLE中指定的主鍵導致任何問題?

回答

8

這是正確的。 JPA無法知道它作爲PK使用的列是否實際上是數據庫中的真正PK。如果這些專欄實際上是PK,那麼它應該沒問題。

如果僞PK列沒有正確編制索引,您可能會遇到一些性能問題,但是 - JPA會假定它會執行良好的執行查詢。

2

JPA本身不會分析您的數據庫。只是不要使用通用方法使用主鍵(find/merge/...)而是使用命名查詢,例如使用jpql更新語法。

@Entity 
@Table(name = "login") 
@NamedQueries({ 
     @NamedQuery(name = "Login.updateLastOnline", 
     query = "UPDATE Login l SET l.lastOnline = :newDate WHERE l.loginId = :loginId") 
     }) 
public class Login implements Serializable 
{ 

不要緊,如果登錄ID是主鍵

+0

爲什麼能找到和合並導致問題? – tputkonen 2010-07-05 11:43:09

+0

@tputkonen - 可能我沒有明確寫出,但我試着說,你可以通過使用JPQL避免使用查找/合併。 – Dewfy 2010-07-05 11:55:56

+0

我同意這一點,只是我們在使用與這些表格合併時遇到了一些奇怪的行爲,並且知道原因 – tputkonen 2010-07-05 12:02:50