首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JPA持久化HashMap<Entity、Entity>

如何使用JPA持久化HashMap<Entity、Entity>
EN

Stack Overflow用户
提问于 2014-06-05 01:50:47
回答 1查看 1.4K关注 0票数 1

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

HashMap如下所示(在GameArea中使用):

代码语言:javascript
复制
private HashMap<GameObject, ObjectContainer> gameObjects;

GameArea类:

代码语言:javascript
复制
@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类(抽象对象):

代码语言:javascript
复制
@MappedSuperclass
public abstract class GameObject implements Serializable {
    private static final long serialVersionUID = 1L;

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

ObjectContainer类(复合组件):

代码语言:javascript
复制
@Entity
public abstract class ObjectContainer extends GameObject implements Serializable {
    private static final long serialVersionUID = 1L;

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

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

我有一个例外:

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

我不知道这是什么意思。我不太确定"OneToMany“的关系...

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2014-06-05 02:28:17

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

如果使用Map而不是HashMap来满足需求,那么以下内容可以解决问题:

代码语言:javascript
复制
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  private Map<GameObject, ObjectContainer> gameObjects;

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

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

https://stackoverflow.com/questions/24044225

复制
相关文章

相似问题

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