我有 POJO,需要通过注释映射 MAP 字段。我正在尝试下面的代码。
@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;
}
我还为“ map ”字段创建了一个单独的类。
下面是 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
最佳答案
我对映射进行了以下更改以使其正确:
@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>();
@JoinColumn
表示包含此 Map 字段的实体类的 ID 字段。
@MapKeyColumn
表示Map的键列。
@Column
表示Map的值列。
@JoinTable
表示将为此 Map 自动创建的表名称。
无需为此映射创建单独的实体类。
关于java - 如何通过注解映射Map<String, String>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15059248/