JPA:如何将一些实体映射到另一个数据库实例的不同模式?
JPA: how to map some entities to a different schema of another database instance?
JPA:有没有办法将一些实体映射到另一个数据库实例的模式?例如,
@Entity
public class Foo {
}
@Entity
@Table(schema="schema1")
public class Bar {
}
Bar 实体映射到同一数据库实例的 schema1。 JPA 中有没有办法将其映射到远程数据库实例中的模式?它对于在多个应用程序之间共享实体很有用。
“目录”可以用于此目的吗?
'remote database'是什么意思?
如果您使用 @Table(schema = "myschema", name = "bar")
,Hibernate 将使用架构名称限定所有查询(例如 SELECT e FROM Bar
最终将转换为 SELECT * FROM myschema.bar
)。如果您用于连接到数据库的数据库用户可以访问 myschema.bar
(无论这样的数据库对象是什么),那么查询将起作用;如果不是,则查询将失败。
如果您的意思是 'a remote DB that is a separate server',那么,当然,每个持久性上下文只能使用一个 JDBC 连接来连接到数据库。如果这是您的情况,也许您应该查阅 RDBMS 的文档以了解连接两个数据库实例的方法(例如,在 Oracle 中,您可以使用数据库链接和同义词)。
不过,请确保您理解其中的含义,因为这样的解决方案会引入其自身的 class 问题(包括您的系统中突然出现隐式分布式事务这一事实)。
作为旁注,我不确定这种方法是如何 'useful for sharing entities among multiple applications' 或者为什么人们会认为 'sharing entities among multiple applications' 在某种程度上有用,但我会认真考虑这个想法通过 shared/linked 数据库集成多个应用程序。它通常引入的问题多于解决的问题。
如果我理解你的意思,你应该使用两个(或更多)不同的持久化上下文
JPA:有没有办法将一些实体映射到另一个数据库实例的模式?例如,
@Entity
public class Foo {
}
@Entity
@Table(schema="schema1")
public class Bar {
}
Bar 实体映射到同一数据库实例的 schema1。 JPA 中有没有办法将其映射到远程数据库实例中的模式?它对于在多个应用程序之间共享实体很有用。
“目录”可以用于此目的吗?
'remote database'是什么意思?
如果您使用 @Table(schema = "myschema", name = "bar")
,Hibernate 将使用架构名称限定所有查询(例如 SELECT e FROM Bar
最终将转换为 SELECT * FROM myschema.bar
)。如果您用于连接到数据库的数据库用户可以访问 myschema.bar
(无论这样的数据库对象是什么),那么查询将起作用;如果不是,则查询将失败。
如果您的意思是 'a remote DB that is a separate server',那么,当然,每个持久性上下文只能使用一个 JDBC 连接来连接到数据库。如果这是您的情况,也许您应该查阅 RDBMS 的文档以了解连接两个数据库实例的方法(例如,在 Oracle 中,您可以使用数据库链接和同义词)。
不过,请确保您理解其中的含义,因为这样的解决方案会引入其自身的 class 问题(包括您的系统中突然出现隐式分布式事务这一事实)。
作为旁注,我不确定这种方法是如何 'useful for sharing entities among multiple applications' 或者为什么人们会认为 'sharing entities among multiple applications' 在某种程度上有用,但我会认真考虑这个想法通过 shared/linked 数据库集成多个应用程序。它通常引入的问题多于解决的问题。
如果我理解你的意思,你应该使用两个(或更多)不同的持久化上下文