埋め込みフィールドに基づいてソートしようとすると、上記の問題が発生します。org.hibernate.QueryException:コンポーネント上に直接条件オブジェクトを作成できない
例:プロパティtObservation.raw.waterLevel.metre
でソートしようとします。 しかし、次の例外を得る。
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)
私は次のような別名を作成します。
criteria.createAlias("tObservation", "0").createAlias("0.raw","1").createAlias("1.waterLevel","2").addOrder(Order.asc("2.meter"))
なぜこの例外が発生しますか? tObservation.id
p.s:
上記のコードは二つのレベル などのために働いている私は次のようにしようとすると、(別名なし)
criteria.addOrder(Order.asc("tObservation.raw.waterLevel.metre"))
私は同じ例外を取得。
私のクラス構造
@Entity
class tank {
Observation tObservation;
}
@Entity
class Observation {
@Embedded
RawObservation raw;
}
@Embeddable
class RawObservation{
@Embedded
Length waterLevel;
}
@Embeddable
class Length{
BigDecimal metre
}
感謝を。私が試してみます。だから、この場合エイリアスを作成するのは間違っていますか? – Ratha
わかりません。私は1つのことに気づいた。エンティティの長さにはメーターフィールドがありますが、オーダーはメーターを使用しますそれはまた、理由がある可能性があります – StanislavL
私は同じ例外が発生した//原因:org.hibernate.QueryException:コンポーネント上で直接Criteriaオブジェクトを作成することはできません。エンティティの所有に関する基準を作成し、点線のプロパティを使用してコンポーネントのプロパティにアクセスします。tObservation.raw \t at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathInfo(CriteriaQueryTranslator.java:251) \t at org.hibernate.loader.criteria .CriteriaQueryTranslator.createCriteriaEntityNameMap(CriteriaQueryTranslator.java:212) \t at org.hibernate.loader.criteria.CriteriaQueryTranslator。(CriteriaQueryTranslator.java:94) // –
Ratha