【问题标题】:How to annotate HashMap?如何注释HashMap?
【发布时间】:2013-05-20 08:42:26
【问题描述】:

我有这个模型:

@Entity
public class ImageModel extends Model {
@Id
private String id;
private String url;

@ManyToMany(cascade = CascadeType.ALL)
private Map<String,String> tags = new HashMap<>();

public void add(String key, String value){
    tags.put(key,value);
}

public String get(String key){
     return tags.get(key);
}

}

这就是我创建新对象的方式:

 ImageModel imageModel = new ImageModel();
/* fill object with data */
imageModel.save(); // I saved it

但是当我尝试检索数据时,HashMap 的记录为零:

HashMap<String, String> imageTags = (HashMap<String, String>) imageModel.getTags();

我该怎么办,hashmap 的信息也会被保存?我已经查看了其他 SO 帖子并尝试过,但似乎没有任何效果: @ManyToMany(cascade = CascadeType.ALL) JPA Map<String,String> mapping

我必须说我使用的是 Play framework 2.1。

【问题讨论】:

  • 你需要通过更多的注解来描述地图对应的实体,@Join等等。 docs.oracle.com/javaee/6/tutorial/doc/bnbqa.html
  • @Matt Ball,感谢您如此迅速的回复,感谢您的帮助。但你能告诉我更多吗?我没有使用 JPA 的经验。为什么我需要@Join?我只想存储该哈希映射并检索它。 (对不起,我的愚蠢)。
  • 根据定义,多对多意味着你想跨表连接,但是你没有告诉JPA要连接哪些表。如果您只是想将Map 存储在实体表中,不要使用@ManyToMany(或任何其他关系)。

标签: java jpa playframework playframework-2.0


【解决方案1】:

您似乎正在尝试使用 ManyToMany,它在引用具有自己的表和标识的实体时使用。字符串不是实体,因此您可能希望将 elementCollection 用于简单类型。 ElementCollections 在这里讨论 http://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/ElementCollections 使用此处显示的地图的简单示例: http://wiki.eclipse.org/EclipseLink/Development/JPA2.0/Extended_Map_support#Basic_-_Basic.2FEmbeddable

【讨论】:

  • 我尝试了一个列表。我用 List 更改了 HashMap 并放入了@ElementCollections,但它仍然有零记录。我不明白的是我是否需要用实体做任何 XML 文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 2023-03-12
  • 2015-12-23
  • 2011-03-18
  • 2010-10-05
  • 2014-12-11
  • 2014-06-16
相关资源
最近更新 更多