Bonjour,

j'ai hérité d'un projet qui utilise Spring data, jpa, hibernate avec différents fichiers de config comme celui-ci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
<tx:annotation-driven transaction-manager="transactionManager" />	
 
	<!-- Activate Spring Data JPA repository support -->
  	<jpa:repositories base-package="com.mc.appcontacts.repository" />
 
 
 	<!-- Declare a JPA entityManagerFactory -->
 	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceXmlLocation" value="classpath:META-INF/contacts/hibernate/persistence.xml" />
		<property name="persistenceUnitName" value="hibernatePersistenceUnit" />
		<!-- <property name="dataSource" ref="dataSource" /> -->
		<property name="jpaVendorAdapter" ref="hibernateVendor" />
	</bean>
 
	<!-- Specify our ORM vendor -->
	<bean id="hibernateVendor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
		<property name="showSql" value="${hibernate.showSql}" />
	</bean>
 
	<!-- Declare a transaction manager-->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
et des classes comme celles là :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public interface ContactRepository extends JpaRepository<Contact, Integer> {
 
 
	List<Contact> findByid(int id);
 
	List<Contact> findByname(String name );
 
	@Query("SELECT c from Contact c WHERE LOWER(c.name) = LOWER(:name)")
    String find(@Param("name") String name);
 
 
}

ça fonctionne très bien !

Seulement maintenant je dois constituer des requêtes dynamiques de manière à récupérer une donnée d'un enregistrement et non tout le contenu, exemple:
récupérer uniquement le nom du contact ou son téléphone ou autre chose...en tout cas un seul attribut.

J'ai vu sur le net que l'on pouvait utiliser JPQL qui permet de constituer sa requête ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 String jpql = "select c." + property + " from ...";
Seulement voila, si j'ai bien compris, il faut déclarer une instance de la classe entitymanager pour utiliser la méthode createQuery :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
EntityManagerFactory factory = Persistence.createEntityManagerFactory();
EntityManager em = factory.createEntityManager();
String jpql = "select c." + property + " from Contact...";
Query jQuery = em.createQuery(jpql);
Question :

Est ce que jpql est le meilleur choix ?
Si oui, est-il possible d'utiliser l'entity manager défini dans le fichier de conf, plutôt que de le déclarer à nouveau dans la classe ?
Si non, est ce que Spring data jpa permet de résoudre ma problématique (sélectionner un seul attribut) ?

Merci d'avance