使用Eclipselink在运行时交换实体表映射

时间:2011-05-05 07:56:18

标签: jpa mapping entity eclipselink

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

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

1 个答案:

答案 0 :(得分:2)

您何时需要检查视图是否为空?

如果可以在启动时完成一次,您可以将此检查放入SessionCustomizer并更改ClassDescriptor的表。

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

您还可以定义另一个视图,为您提供所需的结果。

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

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