繁体   English   中英

休眠:将单个VO映射到两个表

[英]Hibernate : Map single VO to two tables

我有两个表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位于单独的表空间中。 一个是分区的,而另一个则没有。 这种奇怪的要求还有其他一些原因,这是我现在无法更改的架构。

我认为使用两个实体管理器有点过多。 您需要的是对表进行良好的抽象处理。

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

与将抽象实体(而不是具体实体)一起使用Factory或Builder来生成两个对象的一种良好的Repository模式相比,它将完成工作。 如果您采用这种方法,则不需要此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对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM