休眠-如何映射和关联另一个Schema中的类?

时间:2019-05-09 00:55:36

标签: java mysql hibernate hibernate-mapping

这个问题让我难以解释。因此,我将其分为几部分并尝试绘制一些图片。

我在发布之前已阅读的大多数问题(尤其是关于stackoverflow的问题)并未考虑某个主题,该主题涉及将模式S的类'A'与模式X的类'B'相关联< / em>


当前配置

  • Mysql
  • Java
  • 休眠

说明

我有1个模式(称为 S'),该模式包含一些表,这些表包含可由多家公司访问的信息。这些公司只能编写/更改自己定义的模式。但是,他们访问架构 S',例如,以获取可以登录到系统并且是合作伙伴的所有用户的列表(通过SQL查询完成)。

因此,我的应用程序上有一个类,称为User User 类在每个公司模式中都不存在/不应该存在。

下面的图片试图说明这种情况: Illustration of the "brief explanation"

根据stackoverflow中的一些解决方案,一种实现方法是拥有两个不同的SessionFactory对象。一个指向该共享架构,另一个指向公司拥有的架构。

问题

假设我有一个名为 Book 的类和上述的 User 类,例如:

@Entity
public class Book {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

private String name;

@OneToOne
private User owner;

...

}

@Entity
@Table(schema = "S")
public Class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

private String username;
private String dateOfBirth;

....

}

如果我使用两个不同的SessionFactory遵循建议的解决方案,那么当“ Book”类与“ User”有关系时,该如何持久化呢? EntityManager不会持久化类“ Book”上存在的对象“ User”,因为它不会映射到其SessionFactory上。

如果SessionFactory s1 映射到共享模式“ S”,而SessionFactory s2 映射到当前公司模式:

  • 如果我使用 s1 中的EntityManger,它将不会持久化该类 “书”,因为未映射。

  • 如果我从 s2 获得了EntityManager,则该经理不会继续执行 用户对象。

如果表 Book 在模式中,则与类 User 之间存在@OneToOne关系时,该如何保存类 Book X 并且表User在Schema 'S'

参考/相关问题

is it possible to maintain the different schema in same entity class

hibernate join two entity in different schema or session

how to use Hibernate for two different schemas in a single database

0 个答案:

没有答案