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 创建transactionService类可以吗_Java_Hibernate_Jpa - Fatal编程技术网

Java 创建transactionService类可以吗

Java 创建transactionService类可以吗,java,hibernate,jpa,Java,Hibernate,Jpa,我的代码中有一些原子操作。这本书将是一个课堂范例。 您从一个用户取款是第一次访问数据库。然后你把钱交给另一个用户,这将是第二个数据库访问操作。只有两者一起才能执行。如果第一个成功,第二个失败,则必须回滚整个操作 所以在我的应用程序中,我也有这个。也许这永远不会发生,但我确信这是一笔交易。 例如用户保存其假期。而且假期本身也保存在另一个表中 这是我的密码。我决定将所有事务都放在这个类中。我称之为交易服务。 我希望没问题。当我收到一条错误消息时,我只是有点困惑,在我的应用程序中有两个事务管理器。我刚

我的代码中有一些原子操作。这本书将是一个课堂范例。 您从一个用户取款是第一次访问数据库。然后你把钱交给另一个用户,这将是第二个数据库访问操作。只有两者一起才能执行。如果第一个成功,第二个失败,则必须回滚整个操作

所以在我的应用程序中,我也有这个。也许这永远不会发生,但我确信这是一笔交易。 例如用户保存其假期。而且假期本身也保存在另一个表中

这是我的密码。我决定将所有事务都放在这个类中。我称之为交易服务。 我希望没问题。当我收到一条错误消息时,我只是有点困惑,在我的应用程序中有两个事务管理器。我刚决定用一个叫transactionManager的

@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个实体。