簡體   English   中英

帶類名的JPA / Hibernate查詢?

[英]JPA/Hibernate query with class name?

在這個例子中, com.test.Cat擴展了com.test.Animalcom.test.Cat CAT表中沒有字段DB明確定義它的類型(它不是我)。

當我從DB查詢我的動物時,我得到了一組動物。

可以按類名對它們進行排序:

order by r.class

但有沒有辦法使用類名作為標准? 例如,我想讓所有動物都期待狗。 但沒有運氣 - 即使這不起作用:

where r.class = ?      (String "ccc.test.Cat")

因為我得到一個例外:

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
    at org.hibernate.type.IntegerType.set(IntegerType.java:64)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
    at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:62)
    at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1589)
    at org.hibernate.loader.Loader.doQuery(Loader.java:696)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    at org.hibernate.loader.Loader.doList(Loader.java:2228)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
    at org.hibernate.loader.Loader.list(Loader.java:2120)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)

根據文檔的第14.9章 ,您不應該使用雙引號:

在多態持久性的情況下,特殊屬性類訪問實例的鑒別器值。 嵌入在where子句中的Java類名將被轉換為其鑒別器值。

 from Cat cat where cat.class = DomesticCat 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM