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

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

这是正确的行为吗?

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

最佳答案

文档摘录:


NamedNativeQuery:指定一个命名的本机SQL查询。查询名称的作用域是持久性单元。
NamedQuery:使用Java Persistence查询语言指定静态的命名查询。查询名称的作用域是持久性单元。


没有直接指定NamedNativeQuery是静态的,但是两者的作用域相同,并且以后不能更改,这是期望的行为。

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

09-11 18:04