Come si può mappare una mappa in JPA senza utilizzare le classi di Hibernate?Mappatura JPA <String, String> mapping
risposta
Non funziona il seguente lavoro?
@ManyToMany(cascade = CascadeType.ALL)
Map<String,EntityType> entitytMap = new HashMap<String, EntityType>();
EntityType
potrebbe essere qualsiasi tipo di entità, compreso un String
.
Supponiamo che io sono un soggetto di nome libro che sta avendo una mappa di capitoli:
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;
}
}
Funziona per me.
+1. E se volessi recuperare solo il capitolo 3 di tutti questi libri? Ho una domanda simile: http://stackoverflow.com/questions/12952625/jpa-category-language-relationship – ianaz
@ianaz 'seleziona c da Book b join b.chapters c where key (c) = '3'' –
Sfortunatamente, ciò richiede annotazioni specifiche per l'ibernazione. La domanda era per una soluzione senza. – RobertG
Sebbene la risposta data da Subhendu Mahanta sia corretta. Ma @CollectionOfElements
è deprecato. È possibile utilizzare @ElementCollection
invece:
@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>();
Non v'è alcuna necessità di creare una classe di entità separata per il campo Map
. Sarà fatto automaticamente.
Un esempio di lavoro:
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name = "TABLENAME")
@MapKeyColumn(name = "KEY")
@Column(name = "VALUE")
public Map<String, String> getMap() {
return _map;
}
per una relazione molti-a-molti, avresti anche bisogno di 'joinColumns = @JoinColumn (name =" referencing_column ")' all'interno di @CollectionTable e '@MapKeyJoinColumn (name =" referencing_column_other_table ")' – Blauhirn
Il mio codice è per una mappa
- 1. JPA mappatura in lettura
- 2. Mappatura JPA per un elenco o un set <String>
- 3. Mapping dell'ereditarietà con JPA/Hibernate
- 4. Mappatura di SQL View a JPA Entity
- 5. scala hibernate/jpa - ignora bitmap autogenerata $ init $ 0 mapping
- 6. mappatura chiave esterna composita jpa hibernate
- 7. Mappatura tabelle i18n in JPA
- 8. Mappatura entità JPA che è correlata in base a due altri mapping di entità
- 9. JPA mappatura: "QuerySyntaxException: foobar non è mappato ..."
- 10. JPA mappatura @ManyToOne tra Embeddable e EmbeddedId
- 11. Campo chiave esterna null nel mapping @OneToOne con Hibernate/JPA
- 12. ArrayList <HashMap <String, String >> per String []
- 13. Mappatura delle proprietà calcolate con JPA
- 14. mappatura del campo autoreferenziale in JPA
- 15. Fluent NHibernate mappatura IDictionary <string, classe> in modo intelligente
- 16. Mapping tra T -> IHandler <T>
- 17. Mapping un'opzione FunctionalJava <Type> con Hibernate
- 18. Impossibile trasmettere HashMap <String, String> a un'interfaccia che estende Map <String, String>
- 19. Get ArrayList <HashMap <String, String >> valori
- 20. convertire EnumerableRowCollection <string> la lista <string>
- 21. Come iterare Arraylist <HashMap <String, String >>?
- 22. Mappatura di una tabella singola alla raccolta incorporabile in JPA
- 23. java.util.Properties Vs java.util.Map <String, String>
- 24. StringDictionary vs Dictionary <string, string>
- 25. NameValueCollection vs Dictionary <string, string>
- 26. IDictionary <string, string> o NameValueCollection
- 27. Mapping locale del buffer in Vim: <buffer> vs. <localleader>
- 28. elenco completo di mime-type <-> mapping estensione file
- 29. java.lang.IllegalArgumentException: mappatura filtro deve specificare un <url-pattern> o un <nome-servlet>
- 30. JPA supporta il mapping con le viste sql?
io sono un po 'confuso. La domanda riguardava la mappatura di una mappa, ma la "risposta migliore" riguarda una mappa . Mi manca qualcosa? –
whiskeysierra
EntityType può essere qualsiasi tipo di entità, inclusa una stringa. –
Quanti tavoli genera? C'è (1) uno per la classe originale, (2) una tabella di join (con le chiavi per la classe originale e il tipo di entità) e (3) un'altra tabella per EntityType (nello scenario dato, una tabella con solo l'unione chiave di tabella e la stringa mappata)? Questo può essere un sovraccarico, a seconda delle stringhe salvate ... – RobertG