org.hibernate.QueryException:不能直接在组件上创建条件对象 [英] org.hibernate.QueryException: Criteria objects cannot be created directly on components

查看:192
本文介绍了org.hibernate.QueryException:不能直接在组件上创建条件对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在尝试根据嵌入字段进行排序时遇到以上问题;例如:我尝试使用属性 tObservation.raw进行排序.waterLevel.metre
但得到异常。

 引起:org.hibernate.QueryException:无法直接在组件上创建条件对象。在拥有实体上创建条件并使用点属性访问组件属性:tObservation.raw 
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathInfo(CriteriaQueryTranslator.java:251)



我创建了别名;

  createAlias(1.waterLevel,2).addOrder(Order.asc(2.meter)。createAlias(tObservation,0 ))

为什么我得到这个异常?



上面的代码工作在两个级别
例如: tObservation.id



ps:If我尝试像;(没有别名)

  criteria.addOrder(Order.asc(tObservation.raw.waterLevel.metre) )

我得到同样的例外。



我的课堂结构

  @Entity 
class tank {

Observation tObservation;

}


@实体
类观察{

@Embedded
RawObservation raw;

}

@Embeddable
class RawObservation {

@Embedded
长度waterLevel;
}

@Embeddable
class长度{
BigDecimal米

}

解决方案

您也可以尝试这样:

 标准cObserv = criteria.createCriteria(tObservation); 
cObserv.createAlias(raw,r);
cObserv.createAlias(r.waterLevel,rw);

cObserv.createAlias(rw.metre,rwm);

cObserv.setFetchMode(rw.metre,FetchMode.JOIN);

cObserv.addOrder(Order.asc(rw.metre))


I face above issue when try to sort based on an embedded field;

eg: I try to sort with the property tObservation.raw.waterLevel.metre. But getting following exception.

Caused by: org.hibernate.QueryException: Criteria objects cannot be created directly on components.  Create a criteria on owning entity and use a dotted property to access component property: tObservation.raw
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathInfo(CriteriaQueryTranslator.java:251)

I create aliases like;

criteria.createAlias("tObservation", "0").createAlias("0.raw","1").createAlias("1.waterLevel","2").addOrder(Order.asc("2.meter"))

Why I get that exception?

The above code is working for two levels eg: tObservation.id

p.s: If I try like;(without aliases)

criteria.addOrder(Order.asc("tObservation.raw.waterLevel.metre"))

I get same exception.

My class structure

@Entity
class tank {

Observation tObservation;

}


@Entity
class Observation {

@Embedded
RawObservation raw;

}

@Embeddable
class RawObservation{

    @Embedded
Length waterLevel;
}

@Embeddable
class Length{
BigDecimal metre

}

解决方案

You can also try like this :

Criteria cObserv = criteria.createCriteria("tObservation");
cObserv.createAlias("raw", "r");
cObserv.createAlias("r.waterLevel", "rw");

cObserv.createAlias("rw.metre", "rwm");
or
cObserv.setFetchMode("rw.metre", FetchMode.JOIN);

cObserv.addOrder(Order.asc("rw.metre"))

这篇关于org.hibernate.QueryException:不能直接在组件上创建条件对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆