我知道,Hibernate是一个将对象直接映射到表数据的ORM。那么这是否意味着hibernate使调试变得容易?我是一名学生,自学冬眠。我在hibernate中遇到了一个程序,我不必使用try-catch块,因为我们通常使用我们在程序中放入的JDBC逻辑。所以我的问题是如何处理异常并且在hibernate中调试比在JDBC中调试容易吗?
答案 0 :(得分:1)
简短的回答是,Hibernate在未经检查的Hibernate异常中包装了SQLExceptions。所以异常仍然被抛出,你只是没有被迫抓住它们。在实践中这是可以的,因为无论如何通常在运行时都无法对这些异常做任何事情,这是一个类似数据库不可用或无效的HQL语句的问题。您的程序应该有一个位置,它可以捕获所有尚未处理的异常,它记录异常名称和堆栈跟踪。
Hibernate非常有用,但它并不能简化调试。 Hibernate引入了一些间接(重新排序如何执行sql语句,使用身份映射引入第一级缓存等),这可以使调试某些事情变得更加困难。 Hibernate相对于JDBC的一个优点是你没有使用JDBC获得的可怕的容易出错的样板代码,但是如果你使用Ibatis(最近更名为MyBatis)或Spring-JDBC,你会得到同样的优势,而没有Hibernate介绍。
就我个人而言,我非常喜欢Hibernate,它非常强大,但它很复杂,如果你没有花时间去了解发生了什么,它会让你陷入困境。但是,对于大多数情况,JDBC甚至不在我推荐的解决方案列表中,它是一个很难编写的API代码,并且将它包装在一个更好的库中是一个已经多次解决的问题。
答案 1 :(得分:0)
你不必在hibernate查询中使用try / catch块的原因是它抛出的异常是未经检查的异常,而JDBC查询可以抛出被检查的SQLExceptions。您可能希望捕获并处理HibernateExceptions。
使用Hibernate(或其他ORM框架)编程比使用直接JDBC要容易得多,因为它将关系数据转换为对象需要付出很多努力,这可能意味着您可以减少错误。但是Hibernate存在许多复杂性和陷阱,就像任何ORM软件工具一样。
答案 2 :(得分:0)
将表映射到对象只是Hibernate提供的功能之一。你不能错过其他重要的功能,如
由于@Nathan Hughes和@ z7sg的答案都指明Hibernate用SQLExceptions
包裹RuntimeExceptions
,因此我们不必写一些丑陋和不受欢迎的try...catch
循环。
然而,Hibernate还允许您指定Dialect
[底层数据库]并帮助您为所使用的数据库提供特定于自定义的异常。它还允许您生成有关查询的统计信息运行以便您可以改进数据访问方法。
结帐this以获取进一步配置