Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理hibernate异常_Java_Hibernate_Exception Handling - Fatal编程技术网

Java 如何处理hibernate异常

Java 如何处理hibernate异常,java,hibernate,exception-handling,Java,Hibernate,Exception Handling,我有几个问题像 哪个位置是处理HibernateRuntimeException的正确位置。 道层? 服务层 例如,我有saveCustomer且交易失败,我如何通过异常通知用户 我使用的是OpenSessionInView模式,它仅在呈现视图后提交事务。在这种情况下,如果事务失败,我如何通知用户这一点 通常情况下,最好在代码中关于如何处理异常的信息最多的地方处理异常(或者生成包含足够信息的适当错误消息)。在我开发的j2ee应用程序中,我通常有一个事务服务层,将各种DAO调用缝合在一起,我通常在

我有几个问题像

  • 哪个位置是处理Hibernate
    RuntimeException
    的正确位置。 道层? 服务层

  • 例如,我有
    saveCustomer
    且交易失败,我如何通过
    异常通知用户

  • 我使用的是
    OpenSessionInView
    模式,它仅在呈现视图后提交事务。在这种情况下,如果事务失败,我如何通知用户这一点

  • 通常情况下,最好在代码中关于如何处理异常的信息最多的地方处理异常(或者生成包含足够信息的适当错误消息)。在我开发的j2ee应用程序中,我通常有一个事务服务层,将各种DAO调用缝合在一起,我通常在服务层中处理特定于hibernate的运行时异常和所有其他与数据相关的异常。这就是说,如果一个DAO中有一堆逻辑,其中有一些不好的东西可能会出错,那么在那里捕获它,添加一些错误消息上下文,然后在链上重新遍历它可能不是一个坏主意

  • 如果事务中发生异常,您可以将其保留为未捕获状态,或者使用其他上下文重新刷新它。这样,事务管理器就知道如何回滚事务。始终在视图/控制器层中设置异常处理程序,以处理从服务层调用引发的任何特定于应用程序的运行时异常。检查它们是否有其他错误消息,然后使用它们适当地通知用户

  • 据我所知,当异常从事务中抛出时,默认行为应该是回滚,而不是提交。#2的答案也确实回答了这个问题,也就是说,如果您已经将视图层的所有服务调用包装在try/catch块中,那么您应该不会有问题通知用户发生了错误


  • 这篇文章对异常处理有一个很好的概述,您可能会发现它也很有用。

    捕获异常,您可以在其中对异常进行处理。如果您在DAO层中捕获它,那么需要提取特定于DAO层的信息。e、 g.如果是,则无法插入空值,然后记录失败的字段详细信息。一旦完成,服务层就可以直接或以包装格式对异常进行与业务相关的处理。你可以看到这些。这不适用于特定的,但一般适用于所有人。

    太好了。非常感谢你。这篇文章真的帮助了我。