在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.customera或custome rb,具体取决于配置,以及任何客户特定的验证/服务类别以处理新的POJO。你看到底层的列可以不同。
不过,我毫不犹豫地推销到实现这一点,因为..
- 几乎每一个模型类将需要转换的,每个客户的执行,而不是仅仅是不同的人。这是因为我们在模型类中有许多连接(OneToMany等),Hibernate不允许你连接到一个接口(例如HHH-4338)
- 某些类型的util/factory需要生成类的新实例,用来做新属性我们不知道是否使用新CustomerAProperties()或新CustomerBProperties()(出于同样的原因,我们不能用TargetEntity解决上述问题,因为这需要一个.class文件不能在代码中设置)
这些似乎很主要的缺点,所以我试图研究一个更好的方法来做到这一点。我们可以通过Maven构建每个客户,但是我不确定如何在本地开发时不会破坏Eclipse的情况下实现此功能。
或者,有没有其他方法,我不知道?
预先感谢什么任何建议或指针研究等