2012-05-07 56 views
1

假設我已經定義了以下實體:實體兩個ID

@Entity 
class User{ 

    @Id 
    @GeneratedValue 
    @Column(name = "DB_ID") 
    private long id; 

    @Id 
    @Column(name = "LOGIN", unique = true) 
    private String code; 

//setters, getters 
} 

問題#1。
當我使用方法.find(User.class, someId)時,我必須設置什麼ID?我應該使用 long field id還是String字段代碼?或者我可以同時使用長字段ID和字符串字段代碼?

問題#2。
如果我想使用方法.merge(user),在這種情況下記錄會被更新嗎?
情況#1: - ID等於DB_ID,代碼不等於LOGIN
例#2: - 編號不等於DB_ID,碼等於LOGIN
例#3: - idequals DB_ID和碼等於LOGIN
或任何其他條件?

+3

這些ids是獨立的嗎?如果是這樣,就沒有辦法做到這一點,一個實體必須只有一個ID(可能由多個字段組成)。在你的情況下,'DB_ID'可能是實際的id,'LOGIN'列可能只有唯一的約束,並且必須在查詢中使用。 – Thomas

回答

5

任何具有複合的類 id(多個Id字段)必須具有自己定義的IdClass(您尚未完成)。 IdClass的一個實例是你然後傳遞給EM.find的。這在JPA規範中很容易找到

-1

對於問題1,您應該只傳遞長ID,因爲它是您的表的主鍵,您需要根據它找到。

+0

主鍵是複合的。 –