Java 如何绘制地图<;字符串,字符串>;通过注释?

Java 如何绘制地图<;字符串,字符串>;通过注释?,java,spring,hibernate,Java,Spring,Hibernate,我有一个POJO,在其中我需要通过注释映射一个映射字段。我正在尝试下面的代码 @Entity @Table(name = "ITEM_ATTRIBUTE", catalog = "DataSync") public class ItemAttribute implements Cloneable, Serializable { @ElementCollection(targetClass = AttributeValueRange.class) @MapKeyColumn(n

我有一个POJO,在其中我需要通过注释映射一个映射字段。我正在尝试下面的代码

@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", joinColumns=@JoinColumn(name="ITEM_ID"))
    private Map<String, String> attributeValueRange;
}
我有以下错误的堆栈跟踪

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

我对映射进行了以下更改以使其正确:

@ElementCollection(targetClass = java.lang.String.class)
@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>();
@ElementCollection(targetClass=java.lang.String.class)
@JoinTable(name=“ATTRIBUTE\u VALUE\u RANGE”,joinColumns=@JoinColumn(name=“ID”))
@MapKeyColumn(name=“RANGE\u ID”)
@列(name=“VALUE”)
私有映射attributeValueRange=新HashMap();
@JoinColumn
表示包含此映射字段的实体类的ID字段

@MapKeyColumn
表示映射的键列

@Column
表示映射的值列

@JoinTable
表示将为此映射自动创建的表名

不需要为此映射创建单独的实体类

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