【发布时间】:2011-08-19 03:52:30
【问题描述】:
是否可以在运行时使用 Eclipselink 更改实体表映射? 我有一个用注释定义的实体视图映射。现在我有业务需求:“如果这些视图为空,请尝试底层表”。因此,我必须从视图切换到基础表。
视图只是表上的一个 SELECT,有一些限制。
【问题讨论】:
标签: jpa mapping entity eclipselink
是否可以在运行时使用 Eclipselink 更改实体表映射? 我有一个用注释定义的实体视图映射。现在我有业务需求:“如果这些视图为空,请尝试底层表”。因此,我必须从视图切换到基础表。
视图只是表上的一个 SELECT,有一些限制。
【问题讨论】:
标签: jpa mapping entity eclipselink
什么时候需要检查视图是否为空?
如果它可以在启动时完成一次,你可以把这个检查放在一个 SessionCustomizer 中并改变 ClassDescriptor 的表。
如果每次查询都需要这样做,那就更奇怪了。您可以定义一个 MappedSuperclass 和两个子类,一个映射到视图,一个映射到表,然后在您的应用程序中决定使用哪个。
您还可以定义另一个视图来提供您想要的结果。
可以在运行时从 Session 中获取 ClassDescriptor 并对其进行更改,但这通常是个坏主意,因为其他客户端/线程可以同时使用描述符/会话。
或者只是始终映射到表,并过滤查询中的相关内容(或其他连接条件),而不是使用视图。
【讨论】: