Pet*_*rta 6 java orm hibernate
在这个例子中com.test.Cat延伸com.test.Animal并没有场DB中CAT的表com.test.Cat显式定义它的类型(那不是我).
当我从DB查询我的动物时,我得到了一组动物.
可以按类名对它们进行排序:
order by r.class
Run Code Online (Sandbox Code Playgroud)
但有没有办法使用类名作为标准?例如,我想让所有动物都期待狗.但没有运气 - 即使这不起作用:
where r.class = ? (String "ccc.test.Cat")
Run Code Online (Sandbox Code Playgroud)
因为我得到一个例外:
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)
Run Code Online (Sandbox Code Playgroud)
根据文档的第14.9章,您不应该使用双引号:
在多态持久性的情况下,特殊属性类访问实例的鉴别器值.嵌入在where子句中的Java类名将被转换为其鉴别器值.
Run Code Online (Sandbox Code Playgroud)from Cat cat where cat.class = DomesticCat
| 归档时间: |
|
| 查看次数: |
3574 次 |
| 最近记录: |