如何使用JPA </entity,>持久化HashMap <entity,entity =“”>

时间:2014-06-04 17:50:47

标签: jpa hashmap one-to-many

您好,我是JPA-Framework的新手。在我的项目中,我将JPA与EclipseLink和DerbyDB一起使用。这对我来说都很好。但后来我会坚持使用HashMap,这就是我的问题。

HashMap看起来像(在GameArea中使用):

private HashMap<GameObject, ObjectContainer> gameObjects;

类GameArea:

@Entity
public class GameArea implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long OID;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private HashMap<GameObject, ObjectContainer> gameObjects;
}

类GameObject(抽象对象):

@MappedSuperclass
public abstract class GameObject implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long OID;
...
}

class ObjectContainer(复合组件):

@Entity
public abstract class ObjectContainer extends GameObject implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long OID;
...
}

My HashMap是从GameObject到GameObject(作为ObjectContainer)的对象的查找表。

我有一个例外:

Exception [EclipseLink-163] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: This mapping's attribute class does not match the collection class.  [class java.util.Hashtable] cannot be assigned to [class java.util.HashMap].
Mapping: org.eclipse.persistence.mappings.ManyToManyMapping[gameObjects]
Descriptor: RelationalDescriptor(GameArea --> [DatabaseTable(GAMEAREA)])

我不知道这意味着什么...... 我不确定&#34; OneToMany&#34;关系...

请你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

JPA不支持映射HashMap。应该使用接口java.util.Map。 JPA提供者可以自由选择它使用的Map的实际实现。正如错误消息所示,EclipseLink使用java.util.Hashtable

如果使用Map而不是HashMap符合要求,则以下解决问题:

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  private Map<GameObject, ObjectContainer> gameObjects;

如果需要HashMap,简单的解决方法是提供在持久字段gameObjects和HashMap之间进行转换的方法。