2012-10-22 19 views
0

在Spring/Hibernate组合中使用多个数据库“模型”的做法是什么?一个代码库中的Spring,Hibernate和多个模式

希望对我有点困扰的问题有所帮助,因为我不是Spring/Hibernate的专家!

我们正在开发一个到目前为止已经按照其第一个客户的规范构建的web项目。所有的数据库表都映射到POJO,我们使用Hibernate Annotations。非常简单,该项目是一个CRUD应用程序,允许最终用户通过前端更新数据库信息。

我们现在需要支持一个新客户,但这个客户的规格略有不同;我们将更改许多表的列和数据类型。

我们不希望组合成一个表,因为这会使数据库有大量空列(每个客户在某个表中会有10个以上的唯一列)。

我们可以很容易地处理前端,因为我们只是从JSON转换到JSON,并且前端已从头开始实施。但是后端有点复杂。

我们已经尝试了一个原型,在运行时重写两个表;我们转换两个对应的模式类接口和实现每个客户的具体类,经由Spring配置加载,例如用于“产品”表,我们试图:

package com.mycompany.generic.model; 
public interface Product 

然后

package com.mycompany.customera.model; 
@Table(name="products") 
public class CustomerAProduct implements Properties { 
    String colour; 
    int weight; 
} 

package com.mycompany.customerb.model; 
@Table(name="products") 
public class CustomerBProduct implements Properties { 
    String colour; 
    int volume; 
    Double price; 
} 

..where春负荷,作为运行选项,com.mycompany.customeracustome rb,具体取决于配置,以及任何客户特定的验证/服务类别以处理新的POJO。你看到底层的列可以不同。

不过,我毫不犹豫地推销到实现这一点,因为..

  • 几乎每一个模型类将需要转换的,每个客户的执行,而不是仅仅是不同的人。这是因为我们在模型类中有许多连接(OneToMany等),Hibernate不允许你连接到一个接口(例如HHH-4338
  • 某些类型的util/factory需要生成类的新实例,用来做新属性我们不知道是否使用新CustomerAProperties()新CustomerBProperties()(出于同样的原因,我们不能用TargetEntity解决上述问题,因为这需要一个.class文件不能在代码中设置)

这些似乎很主要的缺点,所以我试图研究一个更好的方法来做到这一点。我们可以通过Maven构建每个客户,但是我不确定如何在本地开发时不会破坏Eclipse的情况下实现此功能。

或者,有没有其他方法,我不知道?

预先感谢什么任何建议或指针研究等

回答

0

或者,有没有我不知道的一些其他的方法?

任何你不能从基于注解的映射切换到XML映射的原因?

每位客户都获得一组XML映射文件。现在,只有当模型真正在客户之间存在差异时才需要继承。

相关问题