package bce.server.dao.hibernate; import java.util.List; import org.hibernate.Criteria; import org.hibernate.SessionFactory; import org.hibernate.classic.Session; import org.hibernate.criterion.Restrictions; import bce.java.utils.Hash; import bce.jni.utils.BCEUtils; import bce.server.dao.UserDAO; import bce.server.entities.PersistentUser; /** * BCE用户实体类DAO的Hibernate实现 * * @author robins * */ public class UserHibernateDAO implements UserDAO { SessionFactory factory; public void setFactory(SessionFactory factory) { this.factory = factory; } public UserHibernateDAO() {} /* * (non-Javadoc) * @see bce.server.dao.UserDAO#get(java.lang.Integer) */ @Override public PersistentUser get(Integer userId) { Session session = factory.openSession(); return (PersistentUser) session.get(PersistentUser.class, userId); } /* * (non-Javadoc) * @see bce.server.dao.UserDAO#get(java.lang.String) */ @SuppressWarnings("unchecked") @Override public PersistentUser get(String userName) { Session session = factory.openSession(); Criteria criteria = session.createCriteria(PersistentUser.class); criteria.add(Restrictions.eq("userName", userName)); List<PersistentUser> resultsList = (List<PersistentUser>) criteria.list(); if (resultsList.isEmpty()) return null; return resultsList.get(0); } /* * (non-Javadoc) * @see bce.server.dao.UserDAO#getByEmail(java.lang.String) */ @SuppressWarnings("unchecked") @Override public PersistentUser getByEmail(String email) { Session session = factory.openSession(); Criteria criteria = session.createCriteria(PersistentUser.class); criteria.add(Restrictions.eq("email", email)); List<PersistentUser> resultList = (List<PersistentUser>) criteria.list(); if (resultList.isEmpty()) return null; return resultList.get(0); } /* * (non-Javadoc) * @see bce.server.dao.UserDAO#add(bce.server.entities.PersistentUser) */ @Override public void add(PersistentUser user) { Session session = factory.openSession(); session.beginTransaction(); user.getPassword().getBytes(); user.setPassword(BCEUtils.hex(Hash.sha1(user.getPassword()))); session.save(user); session.getTransaction().commit(); if (session.isOpen()) session.close(); } /* * (non-Javadoc) * @see bce.server.dao.UserDAO#update(bce.server.entities.PersistentUser) */ @Override public void update(PersistentUser user) { Session session = factory.openSession(); session.beginTransaction(); session.update(session.merge(user)); session.getTransaction().commit(); if (session.isOpen()) session.close(); } /* * (non-Javadoc) * @see bce.server.dao.UserDAO#delete(bce.server.entities.PersistentUser) */ @Override public void delete(PersistentUser user) { Session session = factory.openSession(); session.beginTransaction(); session.delete(session.merge(user)); session.getTransaction().commit(); if (session.isOpen()) session.close(); } }