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

时间:2012-10-22 16:36:44

标签: java spring hibernate model

使用多个数据库'模型的公认惯例是什么?在Spring / Hibernate组合中?

对于让我摸不着头脑的问题感谢一些帮助,因为我不是Spring / Hibernate的专家!

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

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

我们不希望合并到一个表中,因为这会使具有大量NULL列的数据库膨胀(在某些表中每个客户将有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;
}

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

但是,我很乐意投入实施这个,因为..

  • 几乎每个模型类都需要转换和实现每个客户,而不仅仅是那些不同的客户。这是因为我们在模型类中有很多连接(OneToMany等),Hibernate不允许你加入一个接口(例如HHH-4338
  • 需要某种类型的util / factory来生成新的类实例,就像我们以前做的那样 new Properties 我们不知道是否使用 new CustomerAProperties() new CustomerBProperties()(出于同样的原因,我们不能使用TargetEntity来解决上述问题,因为这需要一个无法在代码中设置的.class文件)

这些看起来非常重要,所以我正在努力研究一种更好的方法。我们可以通过Maven构建每个客户,但是我不知道如何在我们开发本地的过程中以一种不会破坏Eclipse的方式实现它。

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

提前感谢有关研究内容的任何建议或指示等。

1 个答案:

答案 0 :(得分:0)

  

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

您无法从基于注释的映射切换到xml映射?

每个客户都会获得一组XML映射文件。现在,您只需要在模型真正区别客户时进行子类化。