首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理预订站点中的hibernate事务

如何处理预订站点中的hibernate事务
EN

Stack Overflow用户
提问于 2014-08-29 12:41:50
回答 2查看 893关注 0票数 0

我对hibernate还不熟悉。请帮我设计一下下面的场景。

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

用户预订了机票和酒店,

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

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

3:如果航班预订失败,那么两个预订都会失败。这两个表都应该提交。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-08-29 13:37:27

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

spring

  • 创建两个实体,一个映射到航班预订表,另一个映射到酒店预订表。

  • 创建2个DAO( @Repository),一个负责航班预订的任何更改,另一个映射到酒店预订表。
  1. 在航班预订DAO/存储库中创建一个名为bookFlight的方法,处理任何异常,并将其包装在自定义的FlightBookingException检查异常中,然后将其重新抛出给调用者。在此方法中,您可以考虑使用上面的航班hibernate实体来持久化航班详细信息。
  2. 在酒店预订DAO/存储库中创建一个名为bookHotel的方法,并处理任何异常,并将其包装在自定义HotelBookingException中,然后使用适当的消息重新抛出它。同样,在此方法中,您可以考虑使用上面的酒店hibernate实体来持久化酒店详细信息。
  3. 创建一个服务层(Spring @ service ),您可以将这两个DAO自动绑定到该层,并创建一个名为bookflightandhotel方法的方法,该方法用@Transactional进行注释,然后在此bookflightandhotel方法中调用这两个DAO方法(first first和in )。

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

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

最后,您可以编写一个Spring Junit来测试该特性。如果您有任何进一步的疑问,一定要让我们知道。

票数 1
EN

Stack Overflow用户

发布于 2014-08-29 13:42:38

选中两阶段提交。您可能想要围绕这些想法开发一些东西。

一种方法是,你可以进入航班预订系统并锁定资源。然后你去酒店预订系统试着预订。如果预订成功,那么您可以去预订航班。当您持有对资源的锁定时,您应该能够做到这一点。然而,有一些角落的情况下,你将需要照顾。

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

https://stackoverflow.com/questions/25561818

复制
相关文章

相似问题

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