JPA Map 映射

如何在不使用Hibernate类的情况下在JPA中映射Map?

以下不适合您吗?

@ManyToMany(cascade = CascadeType.ALL) Map entitytMap = new HashMap(); 

EntityType可以是任何实体类型,包括String

虽然Subhendu Mahanta给出的答案是正确的。 但是@CollectionOfElements已被弃用。 您可以使用@ElementCollection

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

无需为Map字段创建单独的Entity类。 它将自动完成。

假设我有一个名为Book的实体,它有一个章节图:

 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 chapters; public Long getBookId() { return bookId; } public void setBookId(Long bookId) { this.bookId = bookId; } public Map getChapters() { return chapters; } public void setChapters(Map chapters) { this.chapters = chapters; } } 

这个对我有用。

一个工作的例子:

 @ElementCollection(fetch=FetchType.EAGER) @CollectionTable(name = "TABLENAME") @MapKeyColumn(name = "KEY") @Column(name = "VALUE") public Map getMap() { return _map; }