当不能直接提取时,我们可以考虑JPQL / HQL查询提取。
本文的应用程序展示如何通过JpaRepository,EntityManager和Session实现查询概念的证明。
关键点:
- 对于JpaRepository, 使用@Query或Spring Data Query Creation
- 对于EntityManager和Session, 使用该createQuery()方法
源代码可以在这里找到 JpaRepository:
@Repository public interface UserRepository extends JpaRepository<User, Long> { @Transactional(readOnly = true) List<User> findByName(String name); @Transactional(readOnly = true) @Query("select u from User u where u.name = ?1") List<User> fetchUsersByName(String name); }
|
@Repository @Transactional(readOnly = true) public class Dao<T, ID extends Serializable> implements GenericDao<T, ID> {
@PersistenceContext private EntityManager entityManager;
@Override public List<T> findByName(String name) { List<T> results = entityManager. createQuery("select u from User u where u.name=:name") .setParameter("name", name) .getResultList();
return results; }
@Override public List<T> findByNameViaSession(String name) { Session session = entityManager.unwrap(Session.class); List<T> results = session.createQuery("select u from User u where u.name=:name") .setParameter("name", name) .list(); return results; } }
|