Java Spring、Hibernate和一个代码库中的多个模式

Java Spring、Hibernate和一个代码库中的多个模式,java,spring,hibernate,model,Java,Spring,Hibernate,Model,在Spring/Hibernate组合中使用多个数据库“模型”的公认做法是什么 如果您能帮我解决一个让我头疼的问题,我将不胜感激,因为我在Spring/Hibernate方面不是专家 我们正在开发一个web项目,到目前为止,该项目是按照其第一个客户的规范构建的。所有数据库表都映射到POJO,我们使用Hibernate注释。非常简单,该项目是一个CRUD应用程序,允许最终用户通过前端更新数据库信息 我们现在需要支持一个新客户,但该客户的规格略有不同;我们将对许多表的列和数据类型进行更改 我们不希望

在Spring/Hibernate组合中使用多个数据库“模型”的公认做法是什么

如果您能帮我解决一个让我头疼的问题,我将不胜感激,因为我在Spring/Hibernate方面不是专家

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

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

我们不希望合并到一个表中,因为这会使数据库中出现大量空列(在某些表中,每个客户将有10多个唯一列)

前端我们可以很容易地处理,因为我们只是在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;
}

…其中Spring作为运行时选项加载com.mycompany.customera或customerb,具体取决于配置,以及任何特定于客户的验证/服务类,以作用于新POJO。您可以看到,基础列可以不同

然而,我对实施这一计划犹豫不决,因为

  • 几乎每个模型类都需要根据客户进行转换和实现,而不仅仅是不同的模型类。这是因为我们在模型类中有许多连接(OneToMany等),Hibernate不允许您连接到接口(例如)
  • 生成类的新实例需要某种类型的util/factory,就像我们以前执行新属性时不知道是使用new CustomerProperties()还是new CustomerProperties()(出于同样的原因,我们无法使用TargetEntity来解决上述问题,因为这需要一个.class文件,而该文件无法在代码中设置)
这些似乎都是相当大的缺点,所以我正试图研究一种更好的方法来做到这一点。我们可以通过Maven按客户构建,但我不确定如何在本地开发时以不会破坏Eclipse的方式实现这一点

或者,还有其他我不知道的方法吗

提前感谢您对研究内容等提出的建议或建议

或者,还有其他我不知道的方法吗

您不能从基于注释的映射切换到xml映射的任何原因

每个客户都会获得一组XML映射文件。现在,您只需要在客户之间的模型确实不同时进行子类化

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