无法将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 list = query.list();//exception throws here 

我有以下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) .... 

请帮助解决此问题。

错误信息看起来很奇怪。

我已阅读相关主题点击但我没有找到答案。

PS

hibernate日志(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=? 

在浏览器中,我看到以下消息:

 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”,则应该命名getter和setter方法

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

如果您正在使用Eclipse, 请右键单击生成getter / setter – > Source – > Generate Getters and Setters …

确保你的getter和setter是公开的。 您还应该为所有实体添加@Table -Annotation

我想也许你的注释应该是

@ManyToOne(TargetEntity = ….类)