Hibernate有多个模式/命名空间和一个SessionFactory

时间:2012-08-30 07:33:29

标签: hibernate multiple-databases

我有相当多的应用程序,有数百个表。

出于组织目的,我想将表分成几组(比如5个左右),并将它们放在数据库中的不同模式中。我只想使用一个数据库,所以我仍然可以跨模式连接表,所以只需要一个SessionFactory。

但是我不确定如果我们在所有模式中发生名称冲突会发生什么。我可以很容易地在hibernate对象的代码中有不同的包,这不是问题。但是当谈到HQL时,如果我有两个实体,在不同的包中都称为“Customer”,那么有可能在HQL查询中区分它们吗?也许有某种前缀?

任何建议都表示赞赏,或者您尝试执行此操作时遇到的任何其他陷阱。

1 个答案:

答案 0 :(得分:1)

我从未尝试过这个,但基本上应该可以。

除非使用实体名称,否则Hibernate不允许多次映射相同的类名(请参阅this question)。 (非常精确:Hibernate不允许多次使用相同的实体名称。当没有指定别的东西时,类的类名称为实体名称。)

文档中的内容并不多。请参阅chapter 5.3, Mapping a class more than once

实体名称可用于:

  • 查询
  • 保存实体时(在您的情况下,不需要指定实体名称,因为它不是同一个映射多次的类。但您需要尝试)。
  • 映射引用时(在此处相同:在您的情况下不应该是必需的)
祝你好运; - )