首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HibernateException和可线程

HibernateException和可线程
EN

Stack Overflow用户
提问于 2016-11-23 17:07:27
回答 4查看 1.8K关注 0票数 1

我正在尝试在我的项目中测试hibernate的工作,因此我试图创建session,IDEA告诉我org.hibernate.HibernateExceptionjava.lang.Throwable是不兼容的,我尝试将一个转换为另一个也失败了。该项目是JavaSE8上的桌面应用程序,只连接了hibernate-core-5.2.4.Finalhibernate-commons-annotations-5.0.1.Final库。Main类:

代码语言:javascript
复制
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

    public class Main {
        public static void main(String[] args) throws Exception {
            try {
                SessionFactory session;
                session = new Configuration().configure().buildSessionFactory();
                session.openSession();
            } catch (HibernateException e) { //fail
                e = (Throwable)e; //fail
                e.printStackTrace();
            }
        }
    }

这是hibernate.cfg

代码语言:javascript
复制
<hibernate-configuration>
  <session-factory>
    <property name=«show_sql»>true</property>
    <property name=«connection.url»>jdbc:sqlite://db/DB.db</property>
    <property name=«connection.driver_class»>org.sqlite.jdbc</property>
    <property name=«connection.username»>root</property>
    <property name=«connection.password»/>
    <property name=«connection.pool_size»>1</property>
    <property name=«current_session_context_class»>thread</property>
    <property name=«dialect»>main.java.SQLiteDialect</property>

<!--> there're some mapping resouces   
    <mapping resource=«logic/File.hbm.xml»/>
<-->    
  </session-factory>
</hibernate-configuration>

我不明白这个错误的原因,因为谷歌显示了以下层次:

代码语言:javascript
复制
java.lang.Object
└extended by java.lang.Throwable
 └extended by java.lang.Exception
  └extended by java.lang.RuntimeException
   └extended by org.hibernate.HibernateException

也许Java 8不能正确支持hibernate,或者像这样smthng?

EN

回答 4

Stack Overflow用户

发布于 2017-03-24 16:50:57

我也遇到了同样的问题。事实证明,我错过了导入javax.persistence (似乎您的情况也是如此)。

只需导入hibernate-jpa即可。在我的例子中,它是hibernate-jpa-2.1-api-1.0.0.Final.jar。

要导入适当的hibernate-jpa,您只需使用Intellij中的“配置模块库”并选择“更改版本”即可。

票数 3
EN

Stack Overflow用户

发布于 2016-11-23 17:15:45

您不能这样做,因为当您在catch块中声明变量e时,它的类型为HibernateException

您需要创建具有Throwable类型的新变量,并将强制转换e变量分配给它,如下所示:

代码语言:javascript
复制
} catch (HibernateException e) {
    Throwable ex = (Throwable)e;
    ex.printStackTrace();
}

最好的方法是wrapping exception,如下所示:

代码语言:javascript
复制
} catch (HibernateException e) {
    Throwable ex = new Throwable(e);
    ex.printStackTrace();
}

或者这样做:

代码语言:javascript
复制
} catch (HibernateException e) {
    try {
        throw (Throwable) e;
    } catch (Throwable ex) {
        ex.printStackTrace();
    }
}

但是这个方法是多余的,我想你不会想用这个的。

票数 1
EN

Stack Overflow用户

发布于 2016-11-23 17:21:32

这不仅是一个糟糕的想法,而且失败了,因为你把它赋给了它自己。

因此,您有一个类型为HibernateException的对象,可以将其强制转换为Throwable (不是必需的,因为强制转换为更通用的类型是无用的)。

然后将此Throwable赋值给HibernateException类型的变量。在这一点上,编译器会抱怨,因为你赋值的东西可能与HibernateException不兼容(据他所知,它也可能是IllegalArgumentException,也可能是Throwable,但不是HibernateException)。

所以你不能分配它。

如果你修复了这些代码,你最终会去做e = (HibernateException) e;,这甚至更疯狂。

真正的问题是:你在这里真正想要实现的是什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40760061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档