EntityClass
具有嵌入属性
embedded
类型
EmbeddedClass
这个属性有一个可为null的属性
optional
. 设置完所有属性后,我可以执行非常简单的HQL查询,如下所示:
Query query = getSession().createQuery(
"FROM EntityClass t WHERE t.embedded = :embedded");
query.setParameter("embedded", embedded);
return (EntityClass) query.uniqueResult();
但是当财产
可选择的
t.optional=?
但是
=NULL
应该是
IS NULL
一些进一步的阅读指出了正确处理null的示例。现在我的代码看起来像:
Criteria query = getSession().createCriteria(EntityClass.class);
query.createCriteria("embedded").add(Example.create(embedded));
return (EntityClass) query.uniqueResult();
当运行代码时,我得到一个
ClassCastException
java.lang.ClassCastException: EmbeddedClass
at org.hibernate.criterion.Example.getEntityMode(Example.java:279)
at org.hibernate.criterion.Example.toSqlString(Example.java:209)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:357)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:113)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:91)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1577)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:328)
这和
EntityPersister.guessEntityMode()
返回null,因为hibernate查找实体类的映射,而不是嵌入类的映射。
似乎org.hibernate.criteria.Example不能用于嵌入式类。你知道怎么做吗?有其他方法吗?
这些类看起来像:
@Entity
public class EntityClass {
...
@Embedded
private EmbeddedClass embedded;
...
}
@Embeddable
public class EmbeddedClass {
private String name;
private String optional;
...
}
我使用hibernate3.3.1和oracle10g,如果有帮助的话。