Quelle est la façon la plus intelligente pour obtenir une entité avec un champ de type que liste a persisté ?
Command.Java
Copiez le code suivant génère :
Quelle est la façon la plus intelligente pour obtenir une entité avec un champ de type que liste a persisté ?
Copiez le code suivant génère :
L'utilisation de certains JPA 2 mise en œuvre: il ajoute un @pour valeur elementcollection annotation, similaire à l'Hibernation, qui fait exactement ce dont vous avez besoin. Il y a un exemple ici: lien texte.
Modifier
Comme mentionné dans les commentaires ci-dessous, le bon JPA 2 mise en œuvre est
javax.persistence.ElementCollection
@ElementCollection
Map<Key, Value> collection;
Voir: http://docs.oracle.com/javaee/6/api/javax/persistence/ElementCollection.html
Des listes d'objets à l'intérieur d'un objet de modèle sont généralement considérés comme "OneToMany" les relations avec un autre objet. Toutefois, une Chaîne n'est pas (par lui-même) déductible au titre d'un client de l'Un-à-Plusieurs relation, qu'elle n'a pas un ID.
Donc, vous devez convertir votre liste de Chaînes pour une liste de l'Argument de la classe JPA objets contenant un IDENTIFIANT et d'un String. Vous pouvez éventuellement utiliser la Chaîne comme l'identité, ce qui permettrait d'économiser un peu d'espace dans votre tableau à la fois de supprimer le champ ID et en consolidant les lignes où les Chaînes sont égales, mais vous perdrez la possibilité de commander les arguments de retour dans leur ordre d'origine (que vous n'avez pas de stocker toutes les informations concernant la commande).
Sinon, vous pouvez convertir votre liste de @Transitoire et ajouter un autre champ (argStorage) à votre classe est un VARCHAR() ou CLOB. Vous devrez ensuite ajouter 3 fonctions: 2 d'entre eux sont les mêmes et devez convertir votre liste de Chaînes de caractères dans une Chaîne unique (dans argStorage) délimité d'une façon que vous pouvez facilement séparer. Annoter ces deux fonctions (qui font chacun la même chose) avec @PrePersist et @PreUpdate. Enfin, ajouter la troisième fonction qui divise le argStorage dans la liste de Chaînes, nouveau et annotation @test de charge. Cela permet de garder votre CLOB mis à jour avec les cordes à chaque fois que vous allez au magasin de la Commande, et de garder la argStorage champ mis à jour avant de les stocker à la DB.
J'ai toujours penser à faire le premier cas. C'est une bonne pratique pour de vrai relations par la suite.
Selon Java persistance avec Hibernate
cartographie des collections de types valeur avec des annotations [...]. Au moment de l’écriture, il n’est pas partie de la norme Java Persistence
Si vous utilisiez mise en veille prolongée, vous pourriez faire quelque chose comme :
Mise à jour : Notez, c’est maintenant disponible en JPA2.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.