package rewards.internal.account;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
/**
* Loads accounts from a data source using the Hibernate API.
*/
@Repository
public class HibernateAccountRepository implements AccountRepository {
private SessionFactory sessionFactory;
@Autowired
public HibernateAccountRepository(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
public Account findByCreditCard(String creditCardNumber) {
Integer accountId = (Integer) getCurrentSession().createSQLQuery(
"select ACCOUNT_ID from T_ACCOUNT_CREDIT_CARD where NUMBER = ?").setString(0, creditCardNumber)
.uniqueResult();
return (Account) getCurrentSession().load(Account.class, accountId.longValue(), LockMode.UPGRADE);
}
}