2010-01-05 70 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