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; }