Java 休眠异常';无法解析属性';使用条件和限制执行查询时

Java 休眠异常';无法解析属性';使用条件和限制执行查询时,java,hibernate,one-to-many,Java,Hibernate,One To Many,我在hibernate中有一个单亲关系,定义如下: @Entity @Table(name = "groups") public class Group extends BaseModel {// BaseModel defines id as @Id and @GeneratedValue @OneToMany @JoinColumn(name = "group_id") private List<User> users; // other fi

我在hibernate中有一个单亲关系,定义如下:

@Entity
@Table(name = "groups")
public class Group extends BaseModel {// BaseModel defines id as @Id and @GeneratedValue

    @OneToMany
    @JoinColumn(name = "group_id")
    private List<User> users;

    // other fields, getters and setters omitted 
}


@Entity
@Table(name = "users")
public class User extends BaseModel {

    @ManyToOne
    @JoinColumn(name = "group_id")
    private Group group;

    // other fields, getters and setters omitted 
}
criteria
对象是在方法中创建的,它可以用于其他一对多表,也可以包含其他列,因此我不能使用方法
getUsers()

不幸的是,上面的代码给出了以下异常:

org.hibernate.QueryException: could not resolve property: group_id of: com.example.User
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75)
    at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1482)
    at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:62)
    and so on ...
有什么问题吗


编辑:

在user759837建议的更改(
criteria c=Restrictions.eq(“group”,1);
)之后,当我调用
criteria.list()
)时,我收到以下错误消息:
无法通过com.example.group.id的反射getter获取字段值

java.lang.IllegalArgumentException: Can not set java.lang.Long field com.example.BaseModel.id to java.lang.Long
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)
    at java.lang.reflect.Field.get(Unknown Source)
    at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:227)
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3875)
    at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3583)
    at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:203)
    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242)
    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:456)
    at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:130)
    ...
BaseModel类是

@MappedSuperclass
public abstract class BaseModel {

    @Id
    @GeneratedValue
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}
我也尝试了
长id
,但都是相同的错误


编辑2:

在大量挖掘之后,看起来
标准
对象应该接收一个组对象作为参数,而不是id:
Restrictions.eq(“group”,{a_group_object})


我可以向那里发送一个id吗?

您的列是组id,您应该使用组的属性 ... 标准c=限制。等式(“”,1);//组的id

如果您使用oracle作为数据库,原因可能是组id是其中的一个关键字。请将名称更改为其他名称,然后重试。

这似乎有效:

Criterion c = Restrictions.eq("group.id", 1); // an id of a group

不,它不是oracle,真正的列名甚至不是
group\u id
。我把它改得更清晰了。+1它对我也有帮助,但为什么它会这样呢?我是一个hibernate新手,查看文档给我的印象是,学习所有的魔法都需要几年的时间。我不知道为什么,但它有帮助=)
Criterion c = Restrictions.eq("group.id", 1); // an id of a group