我有一个带有一组命名查询的Java类(实体)。当弹簧试图注入相关的豆时,它找不到其中一个查询。

例如:

@NamedQueries({
        @NamedQuery(name = "Query1", query = "..."),
        @NamedQuery(name = "Query2", query = "..."),
        @NamedQuery(name = "Query3", query = "..."),
        @NamedQuery(name = "Query4", query = "..."),
        @NamedQuery(name = "Query5", query = "...")
})

当春季试图注入豆子时,我会得到:

org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'myBean': Injection of resource methods failed;nested exception is
java.lang.IllegalArgumentException: Named query not found: Query3 at ...

我确定查询是正确的(所有的单位测试都通过)。

有人知道其根本原因吗?

有帮助吗?

解决方案 2

好吧,我有错误。发生的事情如下:

在我的班级中,有一种用@Resource注释的方法,该方法称为 @entity注释的另一个类中声明的命名查询)。

因此,当Spring注入并运行该方法时,它会尝试使用命名的查询。但是,该查询尚未“准备好”使用,并且抛出的例外是找不到查询。

为了解决这个问题,我必须在弹簧注射完成后运行一种称为的方法,即,我的类必须实现接口org.springframework.context.context.applicationlistener,而方法onapplicationEvent等待org.springframeworkwork.context.context.event。 contextrefreshedevent事件。

那是所有人。谢谢Bozho的帮助。

其他提示

  • 确保您的实体已被映射 /扫描。它注释了吗 @Entity, ,是否添加到 persistence.xml 或相关的提供商配置,或者是自动扫描的。

  • 我会将班级名称前缀到查询 - 即 MyEntity.Query1, MyEntity.Query1 等等

  • 验证是否没有部署错误 - 即您的查询是正确的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top