java.lang.IllegalArgumentException: Named query not found: User.findByEmail

1609 ワード

今日はWebシステムを発表するので、やり直したくないので、既存のものを運んできて、インタフェースやプロファイルなどを少し変更して発表するつもりです.ただし、ログインをテストするときにヒントを与えます.
java.lang.IllegalArgumentException: Named query not found: User.findByEmail
Named queryが見つからないと言っていますが、どうしたんですか.Userクラスでは、確かにUserが定義されています.findByEmailというName 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")
})

行きたいと思って、ネットで調べてみたら、スプリング注釈の問題かもしれないと言っていましたが、ここは漏れていましたか?mavenはcleanとrunを何度も繰り返したが、相変わらずだった.
そこで、考え方を変えることにしたのは、元のプロジェクトをそのまま運ぶ過程で出た問題ではないでしょうか.
そこで、プロジェクトのapp-context.xmlは一度チェックして、何か問題が見つかったようです.
構成プロパティがあります:packageToScan、スキャンするパッケージであるべきで、値は元のプロジェクトのパッケージ名で、それでは問題はここにあるはずです.新しいプロジェクトの中で、私はすでにパッケージ名を変更しました.
<property name="packagesToScan" value="com.hk.foodsafety.service.*.entities" />

そこで、この属性の値を変更して、新しいパッケージ名に変更します.
<property name="packagesToScan" value="com.vict.manage.*.entity" />

そして再稼働、成功しました!
問題が解決する.
構想の総括:既存のプロジェクトから内容をコピーして新しいプロジェクトを作る過程で、必ず関連する配置書類の修正に注意しなければならない.新しいプロジェクトで古いプロジェクトにない問題が発生した場合は、いくつかのプロファイルが古いプロジェクトで使用されているかどうかを重点的に考慮して、変更していません.