2013-02-25 2 views
0

У меня есть POJO, в котором мне нужно сопоставить поле MAP с помощью аннотаций. Я пытаюсь использовать код ниже.Как сопоставить карту <String, String> через аннотации?

@Entity 
@Table(name = "ITEM_ATTRIBUTE", catalog = "DataSync") 
public class ItemAttribute implements Cloneable, Serializable { 

    @ElementCollection(targetClass = AttributeValueRange.class) 
    @MapKeyColumn(name="rangeId") 
    @Column(name="value") 
    @CollectionTable(name="ATTRIBUTE_VALUE_RANGE", [email protected](name="ITEM_ID")) 
    private Map<String, String> attributeValueRange; 
} 

Я также сделал отдельный класс для поля Карта. Ниже AttributeValueRange класс

@Entity 
@Table(name="ATTRIBUTE_VALUE_RANGE", catalog="datasync") 
public class AttributeValueRange { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ID") 
    private Long id; 

    private String rangeId; 

    private String value; 

    /** 
    * @return the rangeId 
    */ 
    public String getRangeId() { 
     return rangeId; 
    } 

    /** 
    * @param rangeId the rangeId to set 
    */ 
    public void setRangeId(String rangeId) { 
     this.rangeId = rangeId; 
    } 

    /** 
    * @return the value 
    */ 
    public String getValue() { 
     return value; 
    } 

    /** 
    * @param value the value to set 
    */ 
    public void setValue(String value) { 
     this.value = value; 
    } 

    /** 
    * @return the id 
    */ 
    public Long getId() { 
     return id; 
    } 

    /** 
    * @param id the id to set 
    */ 
    public void setId(Long id) { 
     this.id = id; 
    } 
} 

я получил следующую трассировку стека ошибок

Caused by: org.springframework.orm.hibernate3.HibernateSystemException: could not get a field value by reflection getter of AttributeValueRange.id; nested exception is org.hibernate.PropertyAccessException: could not get a field value by reflection getter of AttributeValueRange.id 

Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of AttributeValueRange.id 

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field AttributeValueRange.id to java.lang.String 

Пожалуйста Идентифицировать Что я здесь отсутствует?

Я использую рамки ZK, Spring & Hibernate

ответ

1

Я сделал следующие изменения в отображении, чтобы получить это право:

@ElementCollection(targetClass = java.lang.String.class) 
@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>(); 

@JoinColumn представляет собой поле идентификатора класса Entity, который содержит эту карту поле.

@MapKeyColumn представляет собой ключевой столбец Карты.

@Column представляет собой столбец значений на карте.

@JoinTable представляет собой имя таблицы, которое будет автоматически создано для этой Карты.

Нет необходимости создавать отдельный класс Entity для этой Карты.