java - 如何通过注解映射Map<String, String>?

标签 java spring hibernate

我有 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/

相关文章:

java - 使用 hibernate 更新数据库架构

java - MQ 最大连接数问题

java - 找不到 ResourcelessTransactionManager

java - Spring MVC @ControllerAdvice 异常行为根据异常源而不同

spring - 尝试使用 @CreatedBy 更新任何实体时出现 java.lang.StackOverflowError

java - 如何在不是来自 JNDI 的 JPA EntityMangerFactory 上设置数据源

java - 在 Spring Integration 中使用拦截器发送日志消息

java - 正则表达式删除 Eclipse java 中 XML 文件中的注释

java - 从运行的 JVM 导出数据?

java - 在 jdbc 应用程序中连接 mysql 服务器的正确方法是什么?