Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JPA持久化HashMap_Jpa_Hashmap_One To Many - Fatal编程技术网

如何使用JPA持久化HashMap

如何使用JPA持久化HashMap,jpa,hashmap,one-to-many,Jpa,Hashmap,One To Many,你好,我是JPA框架的新手。在我的项目中,我将JPA与EclipseLink和DerbyDB一起使用。对我来说一切都很好。但是我会坚持使用HashMap,这是我的问题 HashMap看起来像是在GameArea中使用的: private HashMap<GameObject, ObjectContainer> gameObjects; @Entity public class GameArea implements Serializable { private static

你好,我是JPA框架的新手。在我的项目中,我将JPA与EclipseLink和DerbyDB一起使用。对我来说一切都很好。但是我会坚持使用HashMap,这是我的问题

HashMap看起来像是在GameArea中使用的:

private HashMap<GameObject, ObjectContainer> gameObjects;
@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;
}
为复合组件初始化ObjectContainer:

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

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long OID;
...
}
我的HashMap是一个查找表,可以作为ObjectContainer查找从GameObject到GameObject的对象

我有一个例外:

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)])
我不知道这是什么意思。。。 我不确定和一个女人的关系


你能帮我吗?

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

若使用Map而不是HashMap符合要求,那个么以下方法可以解决问题:

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  private Map<GameObject, ObjectContainer> gameObjects;
若需要HashMap,那个么简单的解决方法是提供在持久性field gameObjects和HashMap之间转换的方法

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