我有一个包含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}}
答案 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上,这段代码效果非常好。