使用条件和限制进行查询时,休眠异常“无法解析属性”

真软:

我在休眠中定义了一个OneToMany关系,如下所示:

@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 
}

group_id在用户表中。
调用方法Group.getUsers()User.getGroup()正常工作。但是我还需要在该列之后进行查询group_id

Criteria criteria = Activator.getDefault().getSQLSession().createCriteria(User.class);
Criterion c = Restrictions.eq("group_id", 1); // an id of a group
criteria.add(c);

Criterion对象是在方法中创建的,它可以用于其他一对多表或可以包含其他列,因此我不能使用method 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建议(Criterion c = Restrictions.eq("group", 1);进行更改之后,当我调用时criteria.list(),出现以下错误消息:could not get a field value by reflection getter of com.example.Group.id

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;
    }
}

我也尝试long id过,但这是相同的错误。


编辑2:

经过大量的挖掘,看起来该Criterion对象应该接收一个组对象作为参数,而不是id:Restrictions.eq("group", {A_GROUP_OBJECT});

我可以在那里发送一个ID吗?

真软:

这似乎可行:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将模型(域)类中的枚举与休眠一起使用-无法解析属性-异常

获取休眠异常:org.hibernate.QueryException:无法解析属性

休眠无法解析属性

休眠条件和行数限制

休眠条件限制和/或组合

休眠条件/对象属性查询

使用休眠限制删除查询

java休眠无法解析属性

休眠标准无法解析属性

使用条件和限制进行Hibernate Join

与和休眠限制,如何使用?

如何使用休眠条件和投影来构建查询

使用休眠条件创建查询

休眠查询无法解析属性,即使该属性存在并且正确的大小写

无法在postgresql db上使用spring-boot,spring-data-jpa和休眠空间进行地理空间查询

休眠Crtieria和限制无法正常运行

使用查询对条件进行分组和检查

查询后如何设置@Transient字段值?使用休眠条件进行查询

通过示例和投影进行休眠查询

由于添加多个条件GridFSDBFile查询时com.mongodb.BasicDBObject异常的限制

休眠条件:不同的实体然后进行限制

使用 Java 的 PreparedStatement 进行选择查询时获取 SQL 异常

使用Simple.OData.Client从CRM 2011中进行查询时出现“无法识别OData协议版本”异常

如何使用休眠条件创建查询

使用休眠条件查询ManyToMany关系

使用Vararg方法的休眠条件查询

异常当使用LocalDateTime解析DateTime时,无法从TemporalAccessor获取LocalDateTime

HQL:使用ManyToMany进行休眠查询

解析xml时无法获取属性的名称和值