2010-04-17 4 views
4

J'ai un champ aliases de type java.util.Set dans un Entity. Ce Set ne dénote aucune relation avec une Entité.Comment faire pour persister java.util.Set à travers JPA?

  1. Comment puis-je stocker ce champ aliases via JPA?

  2. Comment ce champ est stocké dans la base de données? Je pense que pour la base de données, ce champ est un attribut à valeurs multiples.

+0

@Bozho Oui, 'aliases 'est' String'. Mon persistance-fournisseur est toplink-essentials –

Répondre

6

Comment puis-je conserver ce alias champ par JPA?

JPA 1.0 ne prend pas en charge les collections de types de base de sorte que vous devrez soit:

  1. introduisons une entité et mapper comme @OneToMany ~ ou ~
  2. Obtenez votre Set stockées dans un blob (comme Serializable) ~ ou ~
  3. Marquez @Transient et utiliser un autre getter/setter pour stocker à l'aide d'une représentation de chaîne personnalisée (en utilisant un seperator) ~ ou ~
  4. Utilisez une extension de votre fournisseur JPA prenant en charge la collecte de types de base (par ex. Hibernate a l'annotation @CollectionOfElements).

La solution # 1 serait la solution portable la plus propre. La solution 2 peut entraîner des problèmes lors des mises à niveau. Solution # 3 est une solution de contournement laide pour # 2. La solution # 4 est propre mais non portable.

Dans JPA 2.0, il y a l'annotation @ElementCollection pour ce cas d'utilisation (c'est bien sûr la solution idéale).

Comment ce champ sont stockés dans la base de données

En fonction de la mise en œuvre choisie, il peut être dans un blob, dans un VARCHAR, dans une autre table.

+0

+1 Très précis et au point réponse –

Questions connexes