如何将实体动态持久化到不同的表中



我有一个@Entity类要使用spring-boothibernatepostgres持久化。

现在,我想动态调整实体保存到(或从中读取)的表。这可能吗?

我的目标是创建某种具有大型数据集的缓存表。我希望每天优化和刷新缓存一次(在这个过程中,可能会持续几个小时,我希望在另一个表上进行任何实体操作)。然后,在重建和优化完成后,我想切换回第一个表(再次重建时使用第二个表,反之亦然)。

这可能吗?如果没有,我怎么能做到这一点?

您可以扩展类,如:

@Entity
@Table("cache_table_name")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
class CachedVersionOfOriginal extends Original {
 //nothing here
}

它们将具有相同的结构,TABLE_PER_CLASS确保两个不同的表。

如果你想提取Original,然后插入到CachedVersionOfOriginal中,你可以使用代理模式,比如:

@Entity
@Table("cache_table_name")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
class CachedVersionOfOriginal extends Original {
 private Original original;
 public CachedVersionOfOriginal(Original original){
   this.original = original;
 }
//Then delegate
@Override
public String getPropertyA(){
  return orginal.getPropertyA();
}
}

或者使用Apache Commons逐个属性复制

最新更新