2014-10-08 50 views
0

我的数据库中有一些表格代表Java Map s。他们有两列(key和value):如何使用Hibernate将表映射到Map?

+---+-------+---------+ 
| | Key | Value | 
+---+-------+---------+ 
| 1 | key-1 | value-1 | 
| 2 | key-2 | value-2 | 
| 3 | key-3 | value-3 | 
| 4 | key-4 | value-4 | 
| 5 | key-5 | value-5 | 
+---+-------+---------+ 

现在假设我有这个类:

public class MyClass { 

    private Map<String, String> params; 

    public Map<String, String> getParams() { 
     return params; 
    } 

    public void setParams(Map<String, String> params) { 
     this.params = params; 
    } 

} 

我怎么能映射表来使用JPA/Hibernate的注解params变量?

P.S.

我不知道这是否是重要的,但我想HashMap子类的params,使之成为这样的:

public class Params extends HashMap<String, String> { 

} 

public class MyClass { 

    private Params params; 

    public Params getParams() { 
     return params; 
    } 

    public void setParams(Params params) { 
     this.params = params; 
    } 

} 
+0

当您从包含您的密钥和值的表中获取时,您将获得一个实体列表。在这种情况下,我认为它不可能通过注释生成地图。基本上你会有你的键值对的列表,但在不同的对象。所以你可以使用它。 – 2014-10-08 07:01:38

+0

@javadev hibernate查询返回'List' http://stackoverflow.com/a/417029/892994 – erencan 2014-10-08 07:09:49

+0

是列表。我说的是键值将会出现在对象的单独变量中。但他们会在场。 – 2014-10-08 07:12:42

回答

0

我已经找到了解决办法。它只能使用JPA注释完成。这里是代码:

@ElementCollection(fetch = FetchType.EAGER) 
@CollectionTable(name = "module_parameter") 
@MapKeyColumn(name = "key") 
@Column(name = "value") 
private Map<String, String> params = new HashMap<>();