jpa - 创建Map <string,list <string =“”>&gt;一张桌子的字段

时间:2017-11-29 19:59:07

标签: java jpa

我有一个包含1, key1, value1列的表格。 值看起来像1, key1, value2 2, map2, value1 class MapEntity { Integer map_id; Map<String, List<String>> values; } 等。 是否可以创建这样的实体:

class MapEntity {
 Integer map_id;
 Map<String, Values> values;
}

class Values {
  ..something
  List<String> values;
}

或者

{{1}}

2 个答案:

答案 0 :(得分:0)

您可以实施第二个选项。使用String键和值列表创建Values类。在MapEntity类中,使用mb_data = reader_train.next_minibatch(mb_size, input_map=input_map) z = np.random.normal(mb_size) my_trainer.train_minibatch({feature_image: mb_data[image].data, feature_z: z}) @OneToMany来定义关系:

MapEntity:

@MapKey

密钥:

class MapEntity {
     @Id
     @GeneratedValue
     private Integer map_id;

     @OneToMany(mappedBy="mapentity")
     @MapKey(name="key")
     private  Map<String, Keys> values;
    } 

<强>表格

需要3张桌子:

public class Keys{ @Id @GeneratedValue private Integer id; @ManyToOne private MapEntity mapEntity; @Column(name="key") private String key; @ManyToMany private List<String> values; } (员工)

MapEntity(ProjectType)将键与MapEntities关联

Keys(PROJECTTYPE_PROJECT)将键与值关联

检查此示例: https://en.wikibooks.org/wiki/Java_Persistence/Relationships#Nested_Collections.2C_Maps_and_Matrices

答案 1 :(得分:0)

结束以下解决方案:

0

这是一个将保留对地图的引用的实体。

0

这个实体用于数据。

@Entity
@Table(name = "map_holder")
public class MapHolder {
  @Id
  @Column(name = "map_id")
  public Integer mapId;

  @OneToMany(cascade = CascadeType.ALL)
  @JoinColumn(name = "map_id")
  @MapKey(name = "recordKey")
  public Map<String, MapRecord> values = new HashMap<>();

  public MapHolder() {

  }

  public MapHolder(Integer mapId) {
    this.mapId = mapId;
  }

  public void put(String key, String value) {
    if(values.containsKey(key)) {
      values.get(key).add(value);
    } else {
      MapRecord mr = new MapRecord();
      mr.mapId = mapId;
      mr.recordKey = key;
      mr.recordValue = value;
      values.put(key, mr);
    }
  }
}

最后用法。

注意:像MapRecord中的非主键上的关节似乎是JPA impl,在某些情况下它将无法正常工作。在Eclipselink上,这段代码效果非常好。