无法将java.lang.Integer字段设置为java.lang.Integer

时间:2014-07-11 08:58:45

标签: java hibernate persistence hql

用户声明:

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

请帮助解决此问题。

错误消息看起来非常奇怪。

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

P.S。

休眠日志(异常之前):

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

4 个答案:

答案 0 :(得分:15)

如果将HQL查询更改为from UserPattern where user.id = :user_id and pattern.id = :pattern_id会发生什么?

我认为Hibernate会混淆对象和ID字段。

答案 1 :(得分:4)

您需要按如下方式修改查询:

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

在您的查询中,您尝试将User对象与Integer对象进行匹配。

答案 2 :(得分:1)

如果您的字段名称为&#34; id&#34;,则应将您的getter和setter方法命名为

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

如果您正在使用Eclipse,请通过右键单击生成getter / setter - &gt;来源 - &gt;生成Getters和Setters ......

确保您的getter和setter是公开的。您还应该将 @Table - 注释添加到您的所有实体

答案 3 :(得分:0)

我想也许你的注释应该是

@ManyToOne(TargetEntity = ....类)