在下面的代码中,我有一个收集实体的地图,它包含我的实体的额外字段。我在我的项目中长期使用这种方式。 现在,有必要添加一个额外的列来映射。但是,我希望代码中的变化很小,因此很难解决。如果我将集合更改为一对多列表或将map的值更改为object,则会出现许多重构问题,并且会失去映射访问的灵活性等...
感谢您的任何帮助和建议。
@ElementCollection
@MapKeyColumn(name = "KEY")
@Column(name = "VALUE")
@CollectionTable(name = "ENTITY_X_EXTENSION", joinColumns = @JoinColumn(name = "ENTITY_X_ID"))
private Map<String, String> extensions = new HashMap<String, String>();
答案 0 :(得分:0)
重构这个应该是要走的路。很快你会遇到另一个现在,有必要添加......
但是,假设你有时间压力,你可以只更改映射(它在私有字段上),并保持现有的getter和setter完好无损:
public Map<String, String> getExtensions() {
Map<String, String> result = new HashMap<String, String>();
for (...) {
// Iterate through the changed mapping and read key/value pairs
result.put(key, value);
}
return result;
}
这样现有的代码将继续使用旧的实体API。