有没有办法在hibernate集合中添加一个额外的列?

时间:2015-06-29 12:39:41

标签: java hibernate

在下面的代码中,我有一个收集实体的地图,它包含我的实体的额外字段。我在我的项目中长期使用这种方式。 现在,有必要添加一个额外的列来映射。但是,我希望代码中的变化很小,因此很难解决。如果我将集合更改为一对多列表或将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>();

1 个答案:

答案 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。