web-dev-qa-db-ja.com

Java.lang.IntegerフィールドをJava.lang.Integerに設定できません

ユーザー宣言:

@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
14
gstackoverflow

HQLクエリをfrom UserPattern where user.id = :user_id and pattern.id = :pattern_idに変更するとどうなりますか?

HibernateはオブジェクトとIDフィールドを混同していると思います。

15
Pimgd

次のようにクエリを変更する必要があります。

from UserPattern where user.id = :user_id and pattern.id = :pattern_id

クエリでは、UserオブジェクトをIntegerオブジェクトと照合しようとしています。

4
Priyesh

フィールド名が「id」の場合、ゲッターメソッドとセッターメソッドに名前を付ける必要があります。

public Integer getId(){return id;}
public void setId(Integer id){this.id = id};

Eclipseを使用している場合は、右クリックしてゲッター/セッターを生成します->ソース->ゲッターとセッターを生成...

ゲッターとセッターが公開されていることを確認してください。また、すべてのエンティティに@ Table-Annotationを追加する必要があります

1
dieter

おそらくあなたの注釈は

@ManyToOne(TargetEntity = .... class)

0
T4Technologic