次のコードを実行しています。その名前のhibernateパラメータ[<name>]は存在しません
UserService.java
String alias = "u";
String select = "SELECT u.email";
String where = "u.userId = :id";
Map<String, Object> params = new HashMap<>();
params.put("id", userId);
List<User> users = db.findRecords(User.class, alias, select, where, params);
DB.java
public <T> List<T> findRecords(Class<T> entityClass, String entityAlias, String select, String where, Map<String, Object> params) {
String sql = select + " FROM " + entityClass.getName() + " " + entityAlias;
if (where != null) {
sql = sql + " WHERE " + where;
}
Query query = entityManager.createQuery(sql);
System.out.println(sql);
if (!params.isEmpty()) {
Iterator<Entry<String, Object>> iterator = params.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, Object> entry = iterator.next();
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
query.setParameter((String) entry.getKey(), (Long) entry.getValue());
}
}
return query.getResultList();
}
私は、次のエラー・ログを取得しています。
SELECT u.email FROM com.catalog.user.User u WHERE u.userId = :id
key: id, value: 28636907
Caused by: java.lang.IllegalArgumentException: Parameter with that name [id] did not exist
パラメータがコンソールに表示されたら、不正な引数の例外が発生する原因は何ですか?
助けてください!
クラス 'clues.catalog.user.User'はエンティティとして宣言されていますか? –
はい。 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(名= "cscart_users")を パブリッククラスユーザー{ \t @Column(名= "USER_ID") \t公衆ロングのuserId。 – Sid
おそらく、文字列連結で何か問題が起こっている可能性があります。クエリでidパラメータを見つけることができないと言います... 正しい文字列で作成クエリを実行できますか? entityManager.createQuery( "SELECT u.email FROM clues.catalog.user.User u WHERE u.userId =:id"); – Zeromus