【问题标题】:JPA Map<String,String[]> mappingJPA Map<String,String[]> 映射
【发布时间】:2014-06-25 16:31:45
【问题描述】:

如何在不使用 Hibernate 的类的情况下在 JPA 中映射 Map?

public Map<String, String[]> parameters = new HashMap<String, String[]>();

提前致谢。

【问题讨论】:

    标签: jpa mapping persistence


    【解决方案1】:

    一个示例实现:

    @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_VALUES 表中的MAP_KEY 列是外键,引用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();
    ...
    

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2011-10-20
      • 1970-01-01
      • 2019-11-27
      相关资源
      最近更新 更多