JPA/Hibernate запрашивают с именем класса?

В этом примере com.test.Cat расширяется com.test.Animal и нет никакого поля DB в CAT таблица com.test.Cat явно определяя его тип (это не был я).

Когда я запрашиваю своих животных от 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)
6
задан Pascal Thivent 2 May 2010 в 16:53
поделиться

1 ответ

Согласно главе 14.9 документации, вы не должны использовать двойные кавычки:

Специальный класс свойств обращается к { {1}} значение дискриминатора экземпляра в случае полиморфной персистентности. Имя класса Java , встроенное в предложение where, будет преобразовано в его значение дискриминатора.

 от Cat cat, где cat.class = DomesticCat 
 
6
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: