Hibernate + Springを使用してトランザクションを実行したい。DBからデータを取得してパラメーターを更新し、それを永続化したい。Hibernateを初めて使用する場合、誰かがコードを評価して、同じものを実装するための最良のアプローチを提案してくれる。コードスニペットは次のとおりです。
@Repository
public class WalletDaoImpl implements WalletDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public boolean creditWallet(double amount, final String customerId) {
Session session = this.sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Criteria cr = session.createCriteria(Wallet.class);
cr.add(Restrictions.eq("customerId", customerId));
Wallet walletInfo = (Wallet) cr.uniqueResult();
tx.commit();
final double newbalaance = walletInfo.getAmount() + amount;
walletInfo.setAmount(newbalaance);
Transaction tx2 = session.beginTransaction();
session.update(walletInfo);
tx2.commit();
session.close();
return true;
}
}
前もって感謝します。
トランザクション管理をSpringに任せるのが最善のアプローチです。Springの@Transactionalアノテーションを使用し、トランザクションアノテーションが有効になるようにSpringを構成する必要があります
だから、あなたのコードに戻って...私はこのようなことをします:
@Repository
public class WalletDaoImpl implements WalletDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public boolean creditWallet(double amount, final String customerId) throws Exception
{
Session session = this.sessionFactory.getCurrentSession();
Criteria cr = session.createCriteria(Wallet.class);
cr.add(Restrictions.eq("customerId", customerId));
Wallet walletInfo = (Wallet) cr.uniqueResult();
final double newbalaance = walletInfo.getAmount() + amount;
walletInfo.setAmount(newbalaance);
session.update(walletInfo);
return true;
}
}
@Service
public class WalletServiceImpl implements WalletService
{
@Autowired
private WalletDao dao;
@Override
@Transactional
public boolean updateWallet(double amount, final String customerId) throws Exception
{
return dao.creditWallet(amount, customerId);
}
}
より深い説明はここにあります:Springトランザクション管理
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加