Java 创建transactionService类可以吗
我的代码中有一些原子操作。这本书将是一个课堂范例。 您从一个用户取款是第一次访问数据库。然后你把钱交给另一个用户,这将是第二个数据库访问操作。只有两者一起才能执行。如果第一个成功,第二个失败,则必须回滚整个操作 所以在我的应用程序中,我也有这个。也许这永远不会发生,但我确信这是一笔交易。 例如用户保存其假期。而且假期本身也保存在另一个表中 这是我的密码。我决定将所有事务都放在这个类中。我称之为交易服务。 我希望没问题。当我收到一条错误消息时,我只是有点困惑,在我的应用程序中有两个事务管理器。我刚决定用一个叫transactionManager的Java 创建transactionService类可以吗,java,hibernate,jpa,Java,Hibernate,Jpa,我的代码中有一些原子操作。这本书将是一个课堂范例。 您从一个用户取款是第一次访问数据库。然后你把钱交给另一个用户,这将是第二个数据库访问操作。只有两者一起才能执行。如果第一个成功,第二个失败,则必须回滚整个操作 所以在我的应用程序中,我也有这个。也许这永远不会发生,但我确信这是一笔交易。 例如用户保存其假期。而且假期本身也保存在另一个表中 这是我的密码。我决定将所有事务都放在这个类中。我称之为交易服务。 我希望没问题。当我收到一条错误消息时,我只是有点困惑,在我的应用程序中有两个事务管理器。我刚
@Service
public class TransactionService {
private UserDao userDao;
private HolidayDao holidayDao;
private WorkingMonthDao workingMonthDao;
@Autowired
public TransactionService(UserDao userDao,HolidayDao holidayDao,WorkingMonthDao workingMonthDao)
{
this.userDao = userDao;
this.holidayDao = holidayDao;
this.workingMonthDao = workingMonthDao;
}
//@Transactional(isolation=Isolation.READ_COMMITTED, propagation=Propagation.REQUIRED,readOnly=false,timeout=1000, rollbackFor=Exception.class)
@Transactional(value="transactionManager")
public void saveUserAndHoliday(User user, Holiday holiday)
{
userDao.save(user);
holidayDao.save(holiday);
}
@Transactional(value="transactionManager")
public void saveUserAndDeleteHoliday(User user, Holiday holiday)
{
holidayDao.delete(holiday);
userDao.save(user);
}
@Transactional(value="transactionManager")
public void saveUserAndWorkingMonth(User user, WorkingMonth workingMonth)
{
userDao.save(user);
workingMonthDao.save(workingMonth);
}
}
我会给这样一个服务起另一个名字,可能会根据业务逻辑域将它分成几个类。 假设您坚持干净的代码原则,并希望构建低耦合的应用程序,这在将来很容易得到支持。
事务据说属于应用程序体系结构的一部分。这意味着与事务相关的类不应该包含应用程序核心逻辑。此类类的示例可以是自定义事务管理器。您的所有方法
saveUserAndHoliday
、saveUserAndDeleteHoliday
和saveUserAndWorkingMonth
都负责业务逻辑的一部分,尽管它们只是合并不同DAO的一小部分。在我的实践中,我们曾将此类类称为存储库
——服务(核心业务逻辑层)和DAO(持久性层)之间的中间层。这种方法的问题是,它不能很好地随操作组合的数量而扩展。如果您需要deleteUserAndDeleteHoliday
,deleteUserAndDeleteWorkingMonth
,deleteUserAndSaveWorkingMonth
,该怎么办。。。我认为有20种可能的组合,只需保存和删除这3个实体。