【问题标题】:Exchange Entity Table mapping at Runtime with Eclipselink使用 Eclipselink 在运行时交换实体表映射
【发布时间】:2011-08-19 03:52:30
【问题描述】:

是否可以在运行时使用 Eclipselink 更改实体表映射? 我有一个用注释定义的实体视图映射。现在我有业务需求:“如果这些视图为空,请尝试底层表”。因此,我必须从视图切换到基础表。

视图只是表上的一个 SELECT,有一些限制。

【问题讨论】:

    标签: jpa mapping entity eclipselink


    【解决方案1】:

    什么时候需要检查视图是否为空?

    如果它可以在启动时完成一次,你可以把这个检查放在一个 SessionCustomizer 中并改变 ClassDescriptor 的表。

    如果每次查询都需要这样做,那就更奇怪了。您可以定义一个 MappedSuperclass 和两个子类,一个映射到视图,一个映射到表,然后在您的应用程序中决定使用哪个。

    您还可以定义另一个视图来提供您想要的结果。

    可以在运行时从 Session 中获取 ClassDescriptor 并对其进行更改,但这通常是个坏主意,因为其他客户端/线程可以同时使用描述符/会话。

    或者只是始终映射到表,并过滤查询中的相关内容(或其他连接条件),而不是使用视图。

    【讨论】:

    • 非常有帮助的答案,谢谢。我会尝试 MappedSuperclass 的方式,这应该对我有用。
    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2020-04-02
    相关资源
    最近更新 更多