【问题标题】:Hibernate with multiple schemas/namespaces and one SessionFactory具有多个模式/命名空间和一个 SessionFactory 的休眠
【发布时间】:2012-08-30 07:33:29
【问题描述】:

我有一个相当大的应用程序,包含数百个表。

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

但是,我不确定如果我们在所有模式之间发生名称冲突会发生什么。我可以很容易地在休眠对象的代码中包含不同的包,这不是问题。但是,当涉及到 HQL 时,如果我在不同的包中有两个都称为“客户”的实体,是否可以区分 HQL 查询中的实体?也许带有某种前缀?

任何建议或您在尝试执行此操作时看到的任何其他陷阱。

【问题讨论】:

    标签: hibernate multiple-databases


    【解决方案1】:

    我从未尝试过,但它应该基本上可以工作。

    Hibernate 不允许多次映射相同的类名(请参阅this question),除非您使用实体名称。 (非常准确地说:Hibernate 不允许多次使用相同的实体名称。类在未指定其他内容时将其类名称作为实体名称)。

    文档中没有太多关于它的内容。见chapter 5.3, Mapping a class more than once

    实体名称可用于:

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

    祝你好运;-)

    【讨论】:

    • 谢谢,经过一番调查,我相信可以通过在实体名称前加上“模式”来完成这项工作。因此,您可以使用“from schema.Table”来代替“from Table”。设置 @Entity 注释的 name 属性似乎可以完成这项工作。
    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2018-01-17
    • 2015-09-10
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多