2010-01-05 7 views
0

J'ai un utilisateur de classe qui peut avoir de nombreux loginNames:Objets JPA ElementCollection que les clés

@Entity 
public class User { 

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

} 

Je veux faire en sorte que chaque connexion est unique dans le système quand un des registres utilisateur. Lorsque quelqu'un se connecte, l'objet utilisateur doit être trouvé par le nom de connexion. Les éléments de la collection sont donc une sorte de clé (base de données).

Comment puis-je les faire clés? Comment puis-je interroger efficacement? Serait-il préférable d'utiliser une classe d'entité distincte pour le nom de connexion?

Répondre

1

Que voulez-vous dire la clé? Vous pouvez ajouter des contraintes "uniques" sur CollectionTable pour les rendre uniques. S'ils sont censés clés à travers dans une autre table, alors la seule réponse sensée est d'avoir une entité utilisateur.

+0

Avec « clé » Je veux dire que je peux obtenir l'objet correspondant sans quering tous les objets qu'ils contiennent une certaine valeur dans la liste de connexion. Serait '@CollectionTable (uniqueConstraints = @ UniqueConstraint (columnNames = { "USER_LOGIN"}))' correcte? Est-il possible d'interroger la base de données pour un utilisateur avec une certaine connexion (UserRepository # findByLogin (String)) efficace? – deamon

+0

contraintes uniques semble ok, mais alors vous pouvez facilement l'essayer. Le fait qu'une requête soit "efficace" dépend de l'implémentation de JPA. L'utilisateur fournit uniquement une requête JPQL et c'est tout ce qu'ils devraient faire. Si vous voulez faire une recherche sur une colonne, vous pouvez l'indexer – DataNucleus

Questions connexes