我有很多EntityManager
,每个架构都有一个(我使用entity-mappings
文件来映射EM与模式)。它有效。
当我使用@NamedQuery
时,它的工作方式就像一个魅力,但当我使用@NamedNativeQuery
架构时,不会使用它。我必须符合资格SELECT foo FROM schema.table
。
这是正确的行为吗?
我认为参数@NamedNativeQuery
无法动态传递模式(我相信只有列可以是动态而不是表格或模式或其他任何东西)所以我如何才能将@NamedNativeQuery
用于动态模式呢?
答案 0 :(得分:5)
使用“{h-schema}”为您的表名添加前缀,例如SELECT foo FROM {h-schema}table
(由getting hibernate default schema name programmatically from session factory?提供)
答案 1 :(得分:2)
文件摘录:
没有直接指明NamedNativeQuery
是静态的,但两者都是相同的范围&事后不能改变&这是理想的行为。
命名查询意味着要由多个模块访问 - 应用程序范围,由唯一名称标识,因此它们是静态的&不变。您可以尝试动态构建查询字符串&可以从中创建本机查询,而不是命名本机查询。