hashmap映射到jpa - playframework

use*_*264 1 playframework playframework-1.x

这是我桌子的样本

CREATE TABLE elements (
 elementname,
 displaytext
)  
Run Code Online (Sandbox Code Playgroud)

我如何使用jpa和填充hashmap,以便我可以将其传递给控制器​​查看

HashMap<String, String> hm = new HashMap<String, String>();

render(hm);
Run Code Online (Sandbox Code Playgroud)

并且在视图中我想迭代并获取基于元素名称的displaytext

不是100%确定这是否是一种矫枉过正或者是否存在更简单的方法.碰到这篇文章

更新1:播放框架工作1.2.4

emt*_*t14 8

我不认为你需要一个Map,而只需要一个元素列表.如果我错了,请更清楚地解释你想要实现的目标.


第一个解决方案

你的型号:

@Entity
public class Element extends Model {
   public String name;
   public String text;
}
Run Code Online (Sandbox Code Playgroud)

在你的控制器中:

public static void findElements(){
   List<Element> elements = Element.findAll();
   render(elements);
}
Run Code Online (Sandbox Code Playgroud)

在你看来:

<ul>
#{list items:elements, as:element}
   <li>Name: ${element.name}, Text: ${element.text}</li>
#{/list}
</ul>
Run Code Online (Sandbox Code Playgroud)

第二解决方案

否则,如果您需要实际地图,可以使用上面的模型并在控制器中填充地图:

public static void findElements(){
   List<Element> elements = Element.findAll();
   HashMap<String,String> hm= new HashMap<String,String>();
   for(Element el: elements){
      hm.put(el.name, el.text);
   }
   render(hm);
}
Run Code Online (Sandbox Code Playgroud)

视图:

<ul>
#{list items:hm.KeySet(), as:name}
   <li>Name: ${name}, Text: ${elements.get(name)}</li>
#{/list}
</ul>
Run Code Online (Sandbox Code Playgroud)

第3个解决方案 为地图创建容器:

@Entity
public class ElementContainer extends Model {
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "name_key", nullable = false)
    public Map<String, String> hm;
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public static void findElements(){
   ElementContainer ec = ElementContainer.find().first();
   Map<String,String> hm = null;
   if(ec!=null)
      hm = ec.hm;
   render(hm);
}
Run Code Online (Sandbox Code Playgroud)