Comment mapper une carte dans JPA sans utiliser les classes de Hibernate?Mappage JPA <String, String>
Répondre
Est-ce que ce qui suit ne fonctionne pas pour vous?
@ManyToMany(cascade = CascadeType.ALL)
Map<String,EntityType> entitytMap = new HashMap<String, EntityType>();
EntityType
pourrait être tout type d'entité, y compris un String
.
Supposons que j'ai une entité nommée livre qui est d'avoir une carte de chapitres:
import java.io.Serializable;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import org.hibernate.annotations.CollectionOfElements;
import org.hibernate.annotations.MapKey;
@Entity
public class Book implements Serializable{
@Column(name="BOOK_ID")
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long bookId;
@CollectionOfElements(targetElement=java.lang.String.class)
@JoinTable(name="BOOK_CHAPTER",
[email protected](name="BOOK_ID"))
@MapKey ([email protected](name="CHAPTER_KEY"))
@Column(name="CHAPTER")
private Map<String,String> chapters;
public Long getBookId() {
return bookId;
}
public void setBookId(Long bookId) {
this.bookId = bookId;
}
public Map<String,String> getChapters() {
return chapters;
}
public void setChapters(Map<String,String> chapters) {
this.chapters = chapters;
}
}
Il fonctionne pour moi.
+1. Et si je veux récupérer seulement le chapitre 3 de tous ces livres? J'ai une question similaire: http://stackoverflow.com/questions/12952625/jpa-category-language-relationship – ianaz
@ianaz 'sélectionner c du livre b rejoindre b.chapters c où la clé (c) = '3'' –
Malheureusement, cela nécessite des annotations spécifiques à hibernate. La question était pour une solution sans. – RobertG
Bien que la réponse donnée par Subhendu Mahanta soit correcte. Mais @CollectionOfElements
est obsolète. Vous pouvez utiliser @ElementCollection
à la place:
@ElementCollection
@JoinTable(name="ATTRIBUTE_VALUE_RANGE", [email protected](name="ID"))
@MapKeyColumn (name="RANGE_ID")
@Column(name="VALUE")
private Map<String, String> attributeValueRange = new HashMap<String, String>();
Il n'y a pas besoin de créer une catégorie distincte de l'entité pour le champ Map
. Cela sera fait automatiquement.
Un exemple de réalisation:
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name = "TABLENAME")
@MapKeyColumn(name = "KEY")
@Column(name = "VALUE")
public Map<String, String> getMap() {
return _map;
}
pour une relation many-to-many, vous aurez également besoin de 'joinColumns = @JoinColumn (name =" referencing_column ")' dans @CollectionTable et '@MapKeyJoinColumn (name =" referencing_column_other_table ")' – Blauhirn
Mon code est pour une carte
- 1. Mappage Enum from String
- 2. Extension du mappage d'entité JPA
- 3. JPA - mappage d'entité à sql?
- 4. Java JPA mappage polymorphique sur plusieurs à
- 5. IDictionary <string, string> ou NameValueCollection
- 6. Didacticiel sur le fichier de mappage JPA
- 7. Requête LINQ pour renvoyer un dictionnaire <string, string>
- 8. Store Dictionnaire <string, string> dans les paramètres d'application
- 9. Stocker le dictionnaire <String, String> dans Session (.NET)
- 10. Convert Dictionnaire <String,Int> Dictionnaire de <String, SomeEnum> utilisant LINQ?
- 11. Convertir Func <T, string> [] en Func <T, string[]>?
- 12. Regex '' 'string' '' à <b>chaîne</b>
- 13. Linq List <string> union
- 14. Conversion de String en <T>
- 15. ICollection <string> à la chaîne []
- 16. Mappage de <ctrl-#> caractères
- 17. Hibernate et JPA - Mappage d'erreurs Classe embarquée exposée via une interface
- 18. Trier un dictionnaire <string, Dictionary <string, string >> par la valeur de la valeur interne du dictionnaire en utilisant LINQ?
- 19. Un analogue de String.Join (string, string []) pour IEnumerable <T>
- 20. Comment convertir un dictionnaire <string, string> en une chaîne json en utilisant System.Json?
- 21. C++ char ** -> vecteur <string> -> string -> char ** problème d'analyse syntaxique
- 22. Comment puis-je jetai un « string » dans une « option <string> »
- 23. Comment diviser la chaîne dans un dictionnaire <string, string>
- 24. IEnumerable <string> à SelectList, aucune valeur est sélectionnée
- 25. Envoyer une liste <string> à un service wcf
- 26. Filtrage d'une liste <string> d'un autre via LINQ
- 27. Comment instancier un objet JAXBElement <String>?
- 28. SQL Sélectionnez les valeurs dans la liste <string>
- 29. Comment lier une liste <string> à ItemsControl?
- 30. .NET/C# Reliure IList <string> à un DataGridView
Je suis un peu confus. La question portait sur la mise en correspondance d'une carte, mais la "meilleure réponse" concerne une carte . Est-ce que je manque quelque chose? –
whiskeysierra
EntityType peut être n'importe quel type d'entité, y compris une chaîne. –
Combien de tables cela génère-t-il? Y a-t-il (1) un pour la classe originale, (2) une table de jointure (avec les clés pour la classe d'origine et le type d'entité) et (3) une autre table pour EntityType (dans le scénario donné, une table avec seulement la jointure clé de table et la chaîne mappée)? Cela peut être beaucoup de surcharge, selon les chaînes enregistrées ... – RobertG