原始JDBC、GUI和事务

原始JDBC、GUI和事务,jdbc,guice,dao,Jdbc,Guice,Dao,我尝试使用多个DAO的当前地址DAO和CustomerDao创建一个服务,我知道我要创建一个跨这两个DAO的事务,例如: @Inject private CustomerDao customerDao; @Inject private AddressDao addressDao; Customer getCustomer(int id) { Customer customer = customerDao.getCustomer(id); customer.setAddress

我尝试使用多个DAO的当前地址DAO和CustomerDao创建一个服务,我知道我要创建一个跨这两个DAO的事务,例如:

@Inject
private CustomerDao customerDao;

@Inject
private AddressDao addressDao;

Customer getCustomer(int id) {
    Customer customer = customerDao.getCustomer(id);
    customer.setAddress(addressDao.getAddress(customer.getAddressId());
    return customer;
}
在DAO里面我的东西看起来像那样

public class CustomerDaoJdbcImpl implements CustomerDao {
    private static final Logger logger = LoggerFactory.getLogger(CustomerDaoJdbcImpl.class);

    @Inject
    private Database db;


    public Customer getCustomer(int id) {
      try(Connection connection = db.getConnection()) {
      } catch(SQLException e) {
       ...
      }
    }
}
现在,由于我的连接被注入到dao中,我无法跨越事务。 而且我认为我没有弄清楚,可能需要一本好书来理解一切

首选的解决方案是什么?还是我做错了

目前我认为我已经制定了一个解决方案,但它缺少线程

我从以下网站获得了一些代码:

在这里:

目前我有一个数据库类,它从数据源提取连接,这个类被注入到DAO中,如果我对DAO或服务进行注释,连接将保持打开状态,直到我调用commit或rollback,但我不知道这是否是最好的模式,因为有些人建议在方法内部关闭连接