我有两张桌子 - Table1
和Table2
。两个表的数据结构相同。
我对Table1
和Table2
都有单个VO。我分别为两个表分别有两个.hbm.xml
文件 -
Table1.hbm.xml
和Table2.hbm.xml
在我的java代码中,根据条件我需要保存到Table1
或Table2
if(someCondition)
{
session.saveOrUpdate(VO); //This should be for Table1
}
else
{
session.saveOrUpdate(VO); //This should be for Table2
}
我的问题是,因为VO是相同的,所以在决定保存哪个表时会有冲突。
是否可以将相同的VO映射到两个表?
注意:我有这样一个要求的原因是Table1和Table2在单独的表空间中。一个是分区而另一个不是。 这种奇怪的要求还有其他几个原因,我现在无法改变架构。
答案 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对象。