首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过注解映射一个Map<String,String>?

如何通过注解映射一个Map<String,String>?
EN

Stack Overflow用户
提问于 2013-02-25 10:35:15
回答 1查看 134关注 0票数 0

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

代码语言:javascript
运行
复制
@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

代码语言:javascript
运行
复制
@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;
    }
}

我得到了以下错误的堆栈跟踪

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-25 15:01:12

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

代码语言:javascript
运行
复制
@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表示包含此映射字段的实体类的ID字段。

@MapKeyColumn表示映射的键列。

@Column表示映射的值列。

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

不需要为此Map创建单独的实体类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15059248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档