想象一下,我有课程Account
和Payment
。
班级帐户
public class Account {
private Integer id;
private Integer accountHolderId;
private BigDecimal balance;
private Byte status; // 0: account is fine, 1: locked, can't make payments.
// Getters and Setters
}
课程付款
public class Payment {
private Integer id;
private BigDecimal amount;
private Integer senderId;
private Integer receiver;
private Integer paymentStatusId;
// Getters and Setters
}
DAO图层包含实现CRUD方法的AccountDao
和PaymentDao
类。下一个是服务层,它具有AccountService
和PaymentService
类,可以在DAO类之上执行其他操作。
由于我正在使用货币/货币,我正在使用transactions。我在 DAO类中使用它们。
我的DaoFactory
类有一个方法createConnection()
,它为每个特定的DaoFactory(例如MySqlDaoFactory
)返回一个Connection对象,该对象已使用connection.setAutoCommit(false);
启用了事务功能。因此,每次与数据库建立连接时,我都会手动使用commit()
和rollback()
方法。
我想说我想从一个帐户(发件人)到另一个帐户(收件人)付款。该方案如下所示:
sender.status == 0
,这意味着它已解锁且可以发送付款。he has more or equals amount of money
是否要发送。receiver.status == 0
是否已解锁且可以收款。此方案告诉我们使用两个DAO INSTANCES:AccountDao
和PaymentDao
并从这些实例中调用方法。当我在PaymentService
中实现这个场景时,它是一种实现事务的正确方法吗?
答案 0 :(得分:1)
由于您没有使用某些框架,例如Spring Transaction(我强烈建议您使用),我建议您执行以下操作:
更多的是设计偏好的问题,那么哪一个是正确的