Can not set java.lang.Integer field to java.lang.Integer
Solution 1
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.
Solution 2
You need to modify your query as follows:
from UserPattern where user.id = :user_id and pattern.id = :pattern_id
In your query, you are trying to match a User
object with an Integer
object.
Solution 3
If your field name is "id", your getter and setter methods should be named
public Integer getId(){return id;}
public void setId(Integer id){this.id = id};
If your are using Eclipse, generate the getter/setter by right click -> Source -> Generate Getters and Setters...
Make sure your getters and setter are public. Also you should add @Table-Annotation to all your Entities
gstackoverflow
Updated on September 14, 2020Comments
-
gstackoverflow over 3 years
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
-
Pimgd almost 10 yearsDo you have getters and setters for that id field?
-
gstackoverflow almost 10 yearsYes, I have getters and setters for all fields
-
Pimgd almost 10 yearsWhat's up with the difference in "patern_id" and "pattern_id"?
-
gstackoverflow almost 10 years@Pimgd - fixed, recreate database tables(drope and then create) but I see old result
-
Pimgd almost 10 yearsWhat kind of database are you using? Can you retrieve an empty result set without problems using that code? Can you retrieve a User object by doing a from user where id = ? query?
-
gstackoverflow almost 10 years1.mysql 2.don't understand what do you want
-
gstackoverflow almost 10 years3.**Query query1 = session.createQuery("from User where id= 1"); System.out.println(query1.list());** - this code works good
-
-
gstackoverflow almost 10 yearsIt is enough strange because I know that HQL uses class name instead of table name, and property names instead of column name. UserPattern hasn't user.id property.
-
gstackoverflow almost 10 yearsIt is enough strange because I know that HQL uses class name instead of table name, and property names instead of column name. UserPattern hasn't user.id property.
-
Pimgd almost 10 yearsNo but the idea is this: If everything was public... what would you need to call to get to the user's id? UserPattern.user.id! So that's why it's user.id.
-
dieter almost 10 yearsOh. It's true. @Table annotation allows to specify the name of the table and some other details. docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/…