gpt4 book ai didi

java - 如何在预订网站中处理 hibernate 事务

转载 作者:行者123 更新时间:2023-12-02 05:30:48 25 4
gpt4 key购买 nike

我是 hibernate 新手。请帮我设计以下场景。

在预订网站中,用户可以单独预订机票,也可以同时预订机票和酒店。我如何设计hibernate中的事务管理以便在以下情况下将被完全填充。

用户预订了航类和酒店,

1:航类预订成功,但由于系统问题,无法预订酒店。在这种情况下,航类预订数据库将成功提交,但酒店数据库应回滚。

2:两次预订均成功完成。两个表都已提交。

3:如果航类预订失败,则两个预订都应该失败。这两个表都应该提交。

谢谢

最佳答案

假设您将使用 spring 和 hibernate,下面是您问题的高级设计:-

  1. 创建 2 个实体,一个映射到航类预订表,另一个映射到酒店预订表。

  2. 创建 2 个 DAO(spring @Repository),一个负责处理航类预订的任何更改,另一个负责酒店预订表的任何更改。

  3. 在 Flight Booking DAO/Repository 中创建一个名为 bookFlight 的方法,处理任何异常,并将其包装在自定义的 FlightBookingException 检查异常中,并将其重新抛出给调用者。在这种方法中,您可以考虑使用上述航类 hibernate 实体来保存航类详细信息。

  4. 在 Hotel Booking DAO/Repository 中创建一个名为 bookHotel 的方法,处理任何异常,并将其包装在自定义的 HotelBookingException 中,并使用正确的消息重新抛出它。同样,在此方法中,您可以考虑使用上述酒店 hibernate 实体来保存酒店详细信息。

  5. 创建一个服务层(Spring @Service),您可以将这 2 个 DAO Autowiring 到其中,并创建一个名为 bookflightandhotel 方法的方法,该方法用 @Transactional 进行注释,并在其中调用这 2 个 DAO 方法(第一个航类,然后是酒店)预订航类和酒店方法。

现在默认情况下,当抛出检查异常时,spring 不会回滚事务,这就是为什么您需要使用 @Transactional 注解的回滚功能来仅标记 FlightBookingException。 (例如:- @Transactional(rollbackFor = FlightBookingException.class))。这样做是为了实现上述问题中的第 1 点和第 3 点。

现在在 spring 配置文件中,您需要配置 JTATransactionManager (请参阅文档 Spring Transaction )

最后,您可以编写一个 Spring Junit 来测试该功能。如果您还有任何疑问,请告诉我们。

关于java - 如何在预订网站中处理 hibernate 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25561818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com