2010-01-05 64 views
0

我有一類用戶,可以有許多loginNames:對象在JPA ElementCollection作爲鍵

@Entity 
public class User { 

    @ElementCollection 
    private List<String> logins = new ArrayList<String>(); 

} 

我希望確保每次登錄都是獨一無二的系統,當用戶登記。當有人登錄時,用戶對象應該通過登錄名找到。所以集合中的元素是某種(數據庫)鍵。

我怎樣才能讓他們的鑰匙?我如何有效地查詢?使用單獨的實體類作爲登錄名會更好嗎?

回答

1

你是什麼意思的關鍵?您可以在CollectionTable上添加「唯一」約束條件,使其具有唯一性。 如果他們應該鍵入一些其他表,那麼唯一明智的答案是有一個用戶實體。

+0

使用「鍵」我的意思是我可以在不查詢所有對象的情況下獲取相關對象,無論它們是否包含登錄列表中的某個值。 會是'@CollectionTable(uniqueConstraints = @ UniqueConstraint(columnNames = {「USER_LOGIN」}))'correct? 是否可以有效地查詢具有特定登錄(UserRepository#findByLogin(String))的用戶的數據庫? – deamon 2010-01-05 12:24:43

+0

獨特的約束看起來不錯,但你可以輕鬆地嘗試它。 查詢是否「高效」取決於JPA實現。用戶只提供一個JPQL查詢,這就是他們應該做的。如果你想搜索某一列,那麼你也可以索引它 – DataNucleus 2010-01-06 08:51:26