Lequel des types de collection suivants utilisez-vous dans votre modèle de domaine JPA et pourquoi ?
java.util.Collection
java.util.List
java.util.Set
Je me demandais s'il existait des règles de base en la matière.
MISE À JOUR Je sais faire la différence entre un Set
et un List
. A List
autorise les doublons et dispose d'un ordre et d'une Set
ne peut pas contenir d'éléments en double et ne définit pas d'ordre. Je pose cette question dans le contexte de JPA. Si vous suivez strictement la définition, vous devriez toujours finir par utiliser l'élément Set
puisque votre collection est stockée dans une base de données relationnelle, où vous ne pouvez pas avoir de doublons et où vous devez définir un ordre par vous-même, c'est-à-dire l'ordre dans votre base de données Java List
n'est pas nécessairement conservée dans la base de données.
Par exemple, la plupart du temps, j'utilise la fonction List
non pas parce qu'il a un ordre ou autorise les doublons (que je ne peux pas avoir de toute façon), mais parce que certains des composants de ma bibliothèque de composants ont besoin d'une liste.
0 votes
Je pense que vous trouverez l'annotation @OrderBy utile et intéressante. Premier lien de Google à ce sujet : objectdb.com/api/java/jpa/OrderBy
0 votes
@Grzegorz Oledzki Je connais la
@OrderBy
mais cela n'a rien à voir avec l'ordre dans votreList
. Si vous récupérez votre liste d'entités (qui est annotée avec la mention@OrderBy
), modifie son ordre, fusionne avec la base de données et le récupère à nouveau, l'ordre que vous avez modifié sera-t-il préservé ? Non ! Vous obtiendrez le même ordre que celui que vous avez défini via@OrderBy
0 votes
Je suis d'accord pour dire que ce serait formidable. Mais vous êtes à mi-chemin. Lorsque vous lirez une telle entité, vous obtiendrez l'ordre approprié.
0 votes
L'annotation @OrderColumn renvoie à une colonne d'ordre dans la base de données, spécialement utilisée pour préserver l'ordre des éléments d'une liste lorsque vous les modifiez en mémoire. Inconvénient : la modification de l'ordre d'un élément entraîne la mise à jour de potentiellement toutes les lignes afin de mettre à jour la colonne d'ordre et de la maintenir cohérente avec l'ordre en mémoire.