今天要发布一个Web系统,不想重新做了,于是把一个现有的搬了过来,界面、配置文件等稍微改了改就准备发布了。不过测试登录的时候提示:
java.lang.IllegalArgumentException: Named query not found: User.findByEmail
说是Named query 找不到,怎么回事呢?看看User类中,确实已经定义了User.findByEmail这个Named query,但为什么还是报错呢?看了看entity,确实没问题:
@Entity
@Table(name = "USER")
@NamedQueries({
@NamedQuery(name = "User.findAll",
query = "select u from User u"),
@NamedQuery(name = "User.findByEmail",
query = "select distinct u from User u where u.email=:email"),//已经定义了
@NamedQuery(name = "User.findById",
query = "select distinct u from User u where u.id=:id")
})
想来想去,并且网上也查了查,说是可能是Spring注解的问题,难道这里漏掉了?maven反复clean和run了好多次,还是老样子。
于是,决定换个思路,会不会是在照搬原项目的过程中出的问题呢?
于是,把项目的app-context.xml检查了一遍,好像发现了点问题:
有一个配置属性:packageToScan,应该是要扫描的包,值为原来项目的包名,那么问题应该就是在这里了,因为新的项目里,我已经把包名给改了
<property name="packagesToScan" value="com.hk.foodsafety.service.*.entities" />
<property name="packagesToScan" value="com.vict.manage.*.entity" />
然后重新运行,成功了!
问题解决。
思路总结:在从现有项目中照搬内容做新项目的过程中,一定要注意修改相关的配置文件。如果新项目遇到了老项目中没有的问题,那么在排查的时候可以重点考虑一下某些配置文件是否还是用的老项目的,没改过来。