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
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.
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.
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
i think maybe your annotation should be
@ManyToOne(TargetEntity=....class)
来源:https://stackoverflow.com/questions/24693853/can-not-set-java-lang-integer-field-to-java-lang-integer