0

注釈を介して MAP フィールドをマップする必要がある 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;
}

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 を使用しています

4

1 に答える 1

1

正しく設定するために、マッピングに次の変更を加えました。

@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フィールドを含むEntityクラスのIDフィールドを表します。

@MapKeyColumnマップのキー列を表します。

@Columnマップの値の列を表します。

@JoinTableこのマップ用に自動的に作成されるテーブル名を表します。

このマップ用に個別のエンティティクラスを作成する必要はありません。

于 2013-02-25T07:01:11.907 に答える