5

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

当我使用@NamedQuery它时,它就像一个魅力,但是当我使用@NamedNativeQuery模式时,它没有被使用。我必须符合条件SELECT foo FROM schema.table

这是正确的行为吗?

我认为不可能通过参数@NamedNativeQuery来动态传递模式(我相信只有列可以是动态的,而不是表或模式或其他任何东西)所以我该如何使用@NamedNativeQuery动态模式呢?

4

2 回答 2

7

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

(礼貌地从会话工厂以编程方式获取休眠默认模式名称?

于 2013-10-28T16:40:01.667 回答
2

文档摘录:

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

没有直接指定它NamedNativeQuery是静态的,但两者的范围相同,之后不能更改,这是所需的行为。

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

于 2012-12-20T07:48:54.613 回答