ユーザー宣言:
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
....
パターン宣言:
@Entity
public class Pattern {
@Id
@GeneratedValue
Integer id;
...
UserPatternDeclaration:
public class UserPattern {
@Id
@GeneratedValue
Integer id;
@ManyToOne
@JoinColumn(name = "user_id")
User user;
@ManyToOne
@JoinColumn(name = "pattern_id")
Pattern pattern;
...
データベースへのリクエスト:
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from UserPattern where user = :user_id and pattern = :pattern_id ");
query.setParameter("user_id", userId);
query.setParameter("pattern_id", pattern_id);
List<UserPattern> list = query.list();//exception throws here
次の例外が発生しました:
...
Java.lang.IllegalArgumentException: Can not set Java.lang.Integer field
com.....s.model.User.id to Java.lang.Integer
at Sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.Java:164)
at Sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.Java:168)
at Sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.Java:55)
at Sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.Java:36)
at Java.lang.reflect.Field.get(Field.Java:379)
....
この問題の修正にご協力ください。
エラーメッセージは非常に奇妙に見えます。
関連トピック クリック を読みましたが、答えがわかりません。
休止状態のログ(例外前):
Hibernate:
select
userpatter0_.id as id1_2_,
userpatter0_.amountSearched as amountSe2_2_,
userpatter0_.amountplayed as amountpl3_2_,
userpatter0_.pattern_id as pattern_4_2_,
userpatter0_.user_id as user_id5_2_
from
UserPattern userpatter0_
where
userpatter0_.user_id=?
and userpatter0_.pattern_id=?
ブラウザに次のメッセージが表示されます。
HTTP Status 500....could not get a field value by reflection getter of...model.User.id
HQLクエリをfrom UserPattern where user.id = :user_id and pattern.id = :pattern_id
に変更するとどうなりますか?
HibernateはオブジェクトとIDフィールドを混同していると思います。
次のようにクエリを変更する必要があります。
from UserPattern where user.id = :user_id and pattern.id = :pattern_id
クエリでは、User
オブジェクトをInteger
オブジェクトと照合しようとしています。
フィールド名が「id」の場合、ゲッターメソッドとセッターメソッドに名前を付ける必要があります。
public Integer getId(){return id;}
public void setId(Integer id){this.id = id};
Eclipseを使用している場合は、右クリックしてゲッター/セッターを生成します->ソース->ゲッターとセッターを生成...
ゲッターとセッターが公開されていることを確認してください。また、すべてのエンティティに@ Table-Annotationを追加する必要があります
おそらくあなたの注釈は
@ManyToOne(TargetEntity = .... class)