使用弹簧框架获取“未找到的查询”
-
01-10-2019 - |
题
我有一个带有一组命名查询的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
等等验证是否没有部署错误 - 即您的查询是正确的
不隶属于 StackOverflow