我有一個沒有主鍵的MySQL表,我必須將它映射到一個JPA實體。我無法以任何方式修改表格。沒有主鍵的表的JPA實體
由於實體必須有一個主鍵,我必須指定一個。如果我確定我在實體中使用的字段(或字段,我應該選擇使用複合主鍵)在表中始終是唯一的(而不是空),那麼表可以實現沒有在CREATE TABLE中指定的主鍵導致任何問題?
我有一個沒有主鍵的MySQL表,我必須將它映射到一個JPA實體。我無法以任何方式修改表格。沒有主鍵的表的JPA實體
由於實體必須有一個主鍵,我必須指定一個。如果我確定我在實體中使用的字段(或字段,我應該選擇使用複合主鍵)在表中始終是唯一的(而不是空),那麼表可以實現沒有在CREATE TABLE中指定的主鍵導致任何問題?
這是正確的。 JPA無法知道它作爲PK使用的列是否實際上是數據庫中的真正PK。如果這些專欄實際上是PK,那麼它應該沒問題。
如果僞PK列沒有正確編制索引,您可能會遇到一些性能問題,但是 - JPA會假定它會執行良好的執行查詢。
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是主鍵
爲什麼能找到和合並導致問題? – tputkonen 2010-07-05 11:43:09
@tputkonen - 可能我沒有明確寫出,但我試着說,你可以通過使用JPQL避免使用查找/合併。 – Dewfy 2010-07-05 11:55:56
我同意這一點,只是我們在使用與這些表格合併時遇到了一些奇怪的行爲,並且知道原因 – tputkonen 2010-07-05 12:02:50