我有一个多租户数据库架构。有没有办法为多个相同的数据库使用一个活动模型?
一点澄清:
我有一个Foo exdends Model
与foo_table
. 这foo_table
在等方面是相同的schemaA, schemaB, schameC
。我可以使用同一个Foo
类对来自不同模式的每个表进行操作吗?
我有一个多租户数据库架构。有没有办法为多个相同的数据库使用一个活动模型?
一点澄清:
我有一个Foo exdends Model
与foo_table
. 这foo_table
在等方面是相同的schemaA, schemaB, schameC
。我可以使用同一个Foo
类对来自不同模式的每个表进行操作吗?
如果您有具有相同架构的数据库,则可以在多个数据库中完全使用相同的模型。事实上,当人们从一个数据库到另一个数据库进行 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。