package tudu.domain.dao.jpa;
import org.springframework.stereotype.Repository;
import tudu.domain.dao.UserDAO;
import tudu.domain.model.User;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.List;
/**
* Hibernate implementation of the tudu.domain.dao.UserDAO interface.
*
* @author Julien Dubois
*/
@Repository
public class UserDAOJpa implements UserDAO {
private EntityManager em;
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.em = em;
}
/**
* Get the number of users.
*
* @see tudu.domain.dao.UserDAO#getNumberOfUsers()
*/
public long getNumberOfUsers() {
Query query = em.createNamedQuery("User.getNumberOfUsers");
return (Long) query.getSingleResult();
}
/**
* Get a specific user.
*
* @see tudu.domain.dao.UserDAO#getUser(String)
*/
public final User getUser(final String login) {
return this.em.find(User.class, login);
}
/**
* Find all users with a login starting with the "loginStart" string.
*
* @see tudu.domain.dao.UserDAO#findUsersByLogin(java.lang.String)
*/
@SuppressWarnings("unchecked")
public List<User> findUsersByLogin(String loginStart) {
Query query = em.createNamedQuery("User.findUsersByLogin");
query.setParameter("login", loginStart + "%");
query.setMaxResults(200);
List<User> users = query.getResultList();
return users;
}
/**
* Save a user.
*
* @see tudu.domain.dao.UserDAO#saveUser(tudu.domain.model.User)
*/
public final void saveUser(final User user) {
this.em.persist(user);
}
/**
* Update a user.
*
* @see tudu.domain.dao.UserDAO#updateUser(tudu.domain.model.User)
*/
public final void updateUser(final User user) {
this.em.merge(user);
}
}