java - org.hibernate.Criteria 一堆扩展 org.hibernate.internal.CriteriaImpl 的 add(Restrictions)

标签 java hibernate criteria

大家好,我正在尝试开发一个单一的 Java 类,它可以作为 org.hibernate.Criteria 之类的包装器,以优雅的方式摆脱一堆添加(限制)。这是我到目前为止得到的遗留系统。

public static void prepareForSelect(Criteria crit) {
    crit.add(Restrictions.eq("cid","1"));
    crit.add(Restrictions.eq("did","2");
    crit.add(Restrictions.eq("fdl","3")); //omit for brevity
}

是的,这是非常不充分的,我知道我正在尝试实现一个扩展 org.hibernate.internal.CriteriaImpl 的 java 类,并具有我需要限制并且我想要的属性。这个类有这样的方法。

public org.hibernate.Criteria addStandartsRestrictions(){
   return this.add(Restrictions.eq("cid",getCid())).add(Restrictions.eq("did",getDid())).add(Restrictions.eq("fdl",getFdl()));
}

在我的java代码中这样调用它:

org.hibernate.Criteria myOwnCriteria = ((FullCriteria)Session.getSession().createCriteria(MyJava.class)).addStandartsRestrictions();       

但我遇到以下异常

Exception in thread "main" java.lang.ClassCastException:  org.hibernate.internal.CriteriaImpl cannot be cast to org.com.utilities.classes.FullCriteria
at javaapplication8.JavaApplication8.main(JavaApplication8.java:12)

也许这是不可能的事情,我不知道,请大家指导我。

我的错误实现。

public class FullCriteria extends org.hibernate.internal.CriteriaImpl
{}

最佳答案

Session.createCriteria() 永远不会返回您自己的条件实现的实例。正如您所看到的,将结果强制转换为您的类不会有帮助,因为强制转换永远不会改变对象的类型。

假设您有对动物的引用。而且您知道这种动物一匹马。然后你可以这样做:

Horse horse = (Horse) animal;

以便能够调用 Horse 中存在但 Animal 中不存在的方法。如果该动物实际上是牛,您将得到 ClassCastException,因为牛不是马。

您在应该使用组合的地方使用了继承。您的类不应扩展 CriteriaImpl。它应该使用委托(delegate) Criteria 实例。

关于java - org.hibernate.Criteria 一堆扩展 org.hibernate.internal.CriteriaImpl 的 add(Restrictions),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680398/

相关文章:

Java为什么这个数组等于打印错误?

java - float 操作按钮以类似 Skype 的弧形样式显示

java - 在事件调用期间与 hibernate session 交互

java - group by 子句上的 jdbc.SQLServerException

java - 如何使用 Spring Data JPA 嵌套查询?

java - 一个应用程序在 32 位 Linux 机器上可以使用多少内存?

java - 使用 Rserve 和 java 并想要计算 t.test。无法将结果返回给java

hibernate - 无法加载类 [oracle.jdbc.driver.Oracle 驱动程序]

hibernate - CGLIB 增强失败 :argument type mismatch

java - "IllegalArgumentException occurred calling getter of"使用 SINGLE_TABLE 继承策略运行条件时