管理@NamedNativeQuery和架构

时间:2012-12-19 21:51:24

标签: jpa schema nativequery

我有很多EntityManager,每个架构都有一个(我使用entity-mappings文件来映射EM与模式)。它有效。

当我使用@NamedQuery时,它的工作方式就像一个魅力,但当我使用@NamedNativeQuery架构时,不会使用它。我必须符合资格SELECT foo FROM schema.table

这是正确的行为吗?

我认为参数@NamedNativeQuery无法动态传递模式(我相信只有列可以是动态而不是表格或模式或其他任何东西)所以我如何才能将@NamedNativeQuery用于动态模式呢?

2 个答案:

答案 0 :(得分:5)

使用“{h-schema}”为您的表名添加前缀,例如SELECT foo FROM {h-schema}table

(由getting hibernate default schema name programmatically from session factory?提供)

答案 1 :(得分:2)

文件摘录:

  • NamedNativeQuery:指定命名的本机SQL查询。查询名称的范围限定为持久性单元。
  • NamedQuery:以Java持久性查询语言指定静态命名查询。查询名称的范围限定为持久性单元。

没有直接指明NamedNativeQuery是静态的,但两者都是相同的范围&事后不能改变&这是理想的行为。

命名查询意味着要由多个模块访问 - 应用程序范围,由唯一名称标识,因此它们是静态的&不变。您可以尝试动态构建查询字符串&可以从中创建本机查询,而不是命名本机查询。