web-dev-qa-db-fra.com

Mappage JPA Map <String, String>

Comment puis-je mapper une carte dans JPA sans utiliser les classes d'Hibernate?

27
Rafa de Castro

Les éléments suivants ne fonctionnent-ils pas pour vous?

@ManyToMany(cascade = CascadeType.ALL)
Map<String,EntityType> entitytMap = new HashMap<String, EntityType>();

EntityType peut être n'importe quel type d'entité, y compris un String.

16
Chris K

Bien que la réponse donnée par Subhendu Mahanta soit correcte. Mais @CollectionOfElements est obsolète. Vous pouvez utiliser @ElementCollection au lieu:

@ElementCollection
@JoinTable(name="ATTRIBUTE_VALUE_RANGE", joinColumns=@JoinColumn(name="ID"))
@MapKeyColumn (name="RANGE_ID")
@Column(name="VALUE")
private Map<String, String> attributeValueRange = new HashMap<String, String>();

Il n'est pas nécessaire de créer une classe d'entité distincte pour le champ Map. Cela se fera automatiquement.

24
Jatin Sehgal

Supposons que j'ai une entité nommée Book qui possède une carte des 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",
        joinColumns=@JoinColumn(name="BOOK_ID"))
@MapKey (columns=@Column(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;
}               

}

Ça marche pour moi.

10
Subhendu Mahanta

Un exemple pratique:

@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name = "TABLENAME")
@MapKeyColumn(name = "KEY")
@Column(name = "VALUE")
public Map<String, String> getMap() {
    return _map;
}
2
Taioli Francesco