Ali*_*can 13 jpa java-ee playframework playframework-2.0
我在Play中使用JPA如何存储HashMap将近一周.存储所有其他属性,只有HashMap具有零元素(为空).
public class ImageModel extends Model {
@Id
private String id;
private String url;
@ElementCollection(targetClass = java.lang.String.class)
@MapKeyClass(java.lang.String.class)
private Map<String,String> tags = new HashMap<>();
// the method for adding keys and values to the HashMap
public void add(String key, String value){
tags.put(key,value);
this.save();
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试用以下内容进行注释:
@ElementCollection(fetch=FetchType.LAZY)
Run Code Online (Sandbox Code Playgroud)
所以,我现在唯一的猜测是我没有配置好Play.(我必须说我正在使用Play2并且没有配置任何东西,除了在数据库设置前删除"#"(注释标记)).
On Play文档说:" Play 2.0中没有内置的JPA实现 ".可能是这样吗?
更新:我做了一些研究并说可能是因为我正在使用Play-H2的默认数据库.我尝试使用MySQL - 视频如何做到这一点,但它再次只保存了id和url.我查看了MySQL数据库和表,该类的名称只有2个属性(id和url),没有我的HashMap的痕迹.
Update2:添加了一个打印屏幕 - 带有数据库查询.
Update3:Play中的示例"computer-database-jpa"工作正常,因此JPA应该没问题,但该示例没有使用Map(HashMap).我甚至用EclipseLink改变了hibernate,但仍然没有工作.:(虽然,所有基本类型属性都在数据库中)
以下是我如何使用您的模型实现 HashMap。
@Entity
public class ImageModel extends Model {
//All your fields, etc.
@ManyToMany(mappedBy = "imagesWithTag")
@MapKey(name = "name")
public Map<String,Tag> tags = new HashMap<String,Tag>();
}
@Entity
public class Tag extends Model {
// All your fields, etc.
public String name;
public String value;
@ManyToMany
public List<ImageModel> imagesWithTag = new ArrayList<ImageModel>();
}
Run Code Online (Sandbox Code Playgroud)
我决定采纳 Eric 的建议,为标签创建一个完整的模型,以便轻松进行查询,但有时能够使用地图的功能会有很大帮助。这也适用于 EnumMap。
public void addTag(String tagName, String value) {
Tag tag = Tag.finderTag.where().eq("name", tagName).eq("value", value).findUnique();
if(tag == null) {
tag = Tag.newTag(tagName, value);
}
this.tags.put(tag.name, tag);
this.saveManyToManyAssociations("tags");
}
public static List<ImageModel> getImagesWithTag(String tagName, String tagValue) {
Tag tag = finderTag.where().eq("name", tagName).eq("value", tagValue).findUnique();
List<ImageModel> images = new ArrayList<ImageModel>();
for(ImageModel model : tag.imagesWithTag) {
images.add(model);
}
return images;
}
Run Code Online (Sandbox Code Playgroud)
我几乎没有看到任何有关在 Play 框架模型中使用地图的信息,因此我决定创建一个小型示例项目 (Play 2.1.1) 来尝试并进一步演示地图的使用。
https://github.com/Raymond26/play-framework-demos/tree/master/PlayMap
| 归档时间: |
|
| 查看次数: |
3119 次 |
| 最近记录: |