Hibernate:将单个VO映射到两个表

时间:2016-07-26 10:23:22

标签: java oracle hibernate

我有两张桌子 - Table1Table2。两个表的数据结构相同。 我对Table1Table2都有单个VO。我分别为两个表分别有两个.hbm.xml文件 - Table1.hbm.xmlTable2.hbm.xml

在我的java代码中,根据条件我需要保存到Table1Table2

if(someCondition)
{
session.saveOrUpdate(VO); //This should be for Table1
}
else
{
session.saveOrUpdate(VO); //This should be for Table2
}

我的问题是,因为VO是相同的,所以在决定保存哪个表时会有冲突。

是否可以将相同的VO映射到两个表?

注意:我有这样一个要求的原因是Table1和Table2在单独的表空间中。一个是分区而另一个不是。       这种奇怪的要求还有其他几个原因,我现在无法改变架构。

1 个答案:

答案 0 :(得分:0)

在我看来,使用两个实体经理有点太多了。你需要的是在桌子周围有一个很好的抽象。

您可以多次映射同一个类,只需要用不同的名称映射它。

使用抽象实体(而不是具体的)与一个工厂或构建器结合生成两个对象的一个​​好的存储库模式将完成工作。如果你遵循这种方法,你将不需要这个IF-ELSE流程。

@MappedSuperClass
class AbstractMappedSomeTimes {
      private mappedAttribute;
}

@Table("yourtablename")
public class  MappedOnce extends AbstractEntity{

}

@Table("yourtablename")
public class  MappedTwise extends AbstractEntity{

}

您可以让Repository使用AbstractMappedSomeTimes类型的对象。您还可以创建一个Factory,它将生成MappedOnce对象或MappedTwise对象。