0

我有一个多租户数据库架构。有没有办法为多个相同的数据库使用一个活动模型?

一点澄清:

我有一个Foo exdends Modelfoo_table. 这foo_table在等方面是相同的schemaA, schemaB, schameC。我可以使用同一个Foo类对来自不同模式的每个表进行操作吗?

4

1 回答 1

2

如果您有具有相同架构的数据库,则可以在多个数据库中完全使用相同的模型。事实上,当人们从一个数据库到另一个数据库进行 ETL 时,通常会这样做。

一个典型的程序如下所示:

Base.open(/*connection params*/);
List<Person> johns = Person.where("first_name = ?", "John");
Base.close();
  • 打开一个连接并将其Base.open()附加到当前线程。
  • 下一行在Person.where(..)线程上找到一个连接,并使用它来选择记录。
  • Base.close()在当前线程上找到一个连接并关闭它。

此外,当第一次在 JVM 中使用 ActiveJDBC 模型时,将期望当前线程上有一个连接,并将从当前模式中提取元数据。这将确保:

这意味着在任何给定时间,模型都假定它连接到具有用于获取元数据的相同结构的数据库。

接下来,这可能是您想要的:

Base.open(/*connection params for DB1*/);
List<Person> johns = Person.where("first_name = ?", "John");
Base.close();

Base.open(/*connection params for DB2*/);
for(Person person:johns){
    person.set("first_name", "Bill").setId(null).saveIt();
}
Base.close();

本质上,您将从一个数据库读取数据,但会将其保存到另一个数据库。

需要调用来person.setId(null)确保框架生成插入而不是更新,请参阅http://javalite.io/surrogate_primary_keys

于 2016-12-23T17:06:30.317 回答