Can not set java.lang.Integer field to java.lang.Integer

gstackoverflow picture gstackoverflow · Jul 11, 2014 · Viewed 23.1k times · Source

User declaration:

@Entity
public class User {
    @Id
    @GeneratedValue
    private Integer id;
    ....

Pattern declaration:

@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;
    ...

request to database:

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

I got following exception:

 ...
    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)
    ....

Please help to fix this issue.

error message looks very very strange.

I have read related topic click but I don't found out answer.

P.S.

hibernate log(before exception):

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=?

In browser I see following message:

HTTP Status 500....could not get a field value by reflection getter of...model.User.id

Answer

Pimgd picture Pimgd · Jul 11, 2014

What happens if you change your HQL query to from UserPattern where user.id = :user_id and pattern.id = :pattern_id?

I think Hibernate is confusing objects and ID fields.