是否可以使用Eclipselink在运行时更改实体表映射? 我有一个使用注释定义的实体视图映射。现在我有业务要求:“如果这些视图为空,请尝试基础表”。因此,我必须从视图切换到基础表。
视图只是表上的一个SELECT,但有一些限制。
答案 0 :(得分:2)
您何时需要检查视图是否为空?
如果可以在启动时完成一次,您可以将此检查放入SessionCustomizer并更改ClassDescriptor的表。
如果你每次查询都需要这样做,那就更奇怪了。您可以定义MappedSuperclass和两个子类,一个映射到视图,一个映射到表,然后在您的应用程序中决定使用哪个。
您还可以定义另一个视图,为您提供所需的结果。
可以在运行时从Session获取ClassDescriptor并更改它,但这通常是个坏主意,因为其他客户端/线程可以同时使用描述符/会话。
或者只是始终映射到表格,并过滤查询中的相关内容(或其他加入条件),而不是使用视图。