2014-05-08 109 views

回答

0

示例实现:

@Entity 
@Table(name = "MAP") //optional 
public class Parameters { 

    @Id 
    @Column(name = "\"KEY\"") //optional 
    private String id; 

    @ElementCollection 
    @CollectionTable(//optional 
     name = "MAP_VALUES", 
     joinColumns = { @JoinColumn(name="MAP_KEY") } 
    ) 
    private Collection<String> collection; 

    public Parameters() { } 

    public Parameters(String key, Collection<String> values) { 
     this.id = key; 
     this.collection = values; 
    } 

    public Collection<String> values() { 
     return collection; 
    } 

    // ... 
} 

实体实例可以插入到数据库中,如下所示:

em.persist(new Parameters("first", Arrays.asList("a", "b", "c"))); 
em.persist(new Parameters("second", Arrays.asList("d", "e", "f"))); 
... 

这将产生在数据库中两个表:

MAP  MAP_VALUES 

KEY  MAP_KEY COLLECTION 
------ ------- ---------- 
first  first a 
second first b 
      second c 
      second d 

MAP_KEY第th列e MAP_VALUES表是外键,是指MAP表。


内容可如下获得:

Parameters entry = em.find(Parameters.class, "second"); 
List<String> values = entry.values(); 
... 

String query = "SELECT p FROM Parameters p"; 
List<Parameters> entries = em.createQuery(query, Parameters.class) 
          .getResultList(); 
List<String> values = entry.values(); 
... 
相关问题