Подтвердить что ты не робот

Отображение карты JPA <String, String>

Как я могу сопоставить карту в JPA без использования классов Hibernate?

4b9b3361

Ответ 1

Не работает ли для вас следующее?

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

EntityType может быть любым типом сущности, включая String.

Ответ 2

Хотя ответ Субхенду Маханты верен. Но @CollectionOfElements устарел. Вместо этого вы можете использовать @ElementCollection:

@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>();

Нет необходимости создавать отдельный класс Entity для поля Map. Это будет сделано автоматически.

Ответ 3

Предположим, что у меня есть сущность с именем 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",
        [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;
}               

}

Это работает для меня.

Ответ 4

Рабочий пример:

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