spring+hibernate jpa(一)
?
Userdao.javapackage com;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.PersistenceException;import javax.persistence.Query;import org.springframework.orm.jpa.JpaCallback;import org.springframework.orm.jpa.JpaTemplate;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;import domain.User;@Repositorypublic class Userdao { private EntityManagerFactory entityManagerFactory; public Userdao() { } protected JpaTemplate getJpaTemplate() { return new JpaTemplate(this.entityManagerFactory); } @Transactional // 声明为事务 public void createUser(User user) { final JpaTemplate jpaTemplate = getJpaTemplate(); jpaTemplate.persist(user); } @Transactional // 声明为事务 public void updateAndsaveUser(User user) { final JpaTemplate jpaTemplate = getJpaTemplate(); user = jpaTemplate.merge(user); System.out.println("修改完成"); } @Transactional public void deleteUser(User user) {// 注意与deleteUserById()方法的比较 final JpaTemplate jpaTemplate = getJpaTemplate();// 下面为什么没有用user // =jpaTemplate.merge(user); // 是因为下面的查找和删除都在一个事务中,user一直处于managed状态 user = jpaTemplate.merge(user); // change bean from detacthed to // managed; jpaTemplate.remove(user); } public User findUserById(Integer id) { final JpaTemplate jpaTemplate = getJpaTemplate(); return jpaTemplate.find(User.class, id); } @Transactional // 声明事务 public boolean deleteAllUsers() { final JpaTemplate jpaTemplate = getJpaTemplate(); return (Boolean) jpaTemplate.execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query q = em.createNativeQuery("Delete from User"); if (q.executeUpdate() == 0) return Boolean.TRUE; else return Boolean.FALSE; } }); } public List findAllUsers() { final JpaTemplate jpaTemplate = getJpaTemplate(); return jpaTemplate.findByNamedQuery("User.findAllUsers"); } @Transactional // 事务声明 删除操作必须在事务中才能完成 public boolean deleteUserById(Integer id) { User user = null; final JpaTemplate jpaTemplate = getJpaTemplate(); user = jpaTemplate.find(User.class, id); if (user != null) { jpaTemplate.remove(user); System.out.println("删除用户:" + user.getName() + "(id=" + user.getId() + ")"); return true; } else { System.out.println("无法删除用户(id=" + id + ")"); return false; } } public void setEntityManagerFactory( EntityManagerFactory entityManagerFactory) { this.entityManagerFactory = entityManagerFactory; }}?