Spring 3.0 a ajouté beaucoup de fonctionnalités pour être compatible avec Java 5. De nombreuses méthodes sont paramétrées maintenant. Par exemple HibernateTemplate.executeXXX()
, HibernateTemplate.getXXX()
, HibernateTemplate.mergeXXX()
renvoyer T, HibernateTemplate.loadAll()
renvoie List<T>
.Pourquoi les méthodes findXXX() dans HibernateTemplate retournent une liste non paramétrée?
Mais findXXX()
méthodes retournent plaine List
, donc je dois le cast à quelque chose comme List<MyEntity>
.
Est-ce que quelqu'un sait quelle est la raison? Pourquoi les méthodes de recherche ne sont pas paramétrées? Ou probablement il y a d'autres API paramétrées?
Voici ce que je fais.
Ceci est la partie pertinente de spring.xml:
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor" autowire="byName" /><!--sessionFactory will get autowired-->
<bean id="deviceDaoTarget" class="com.nso.solution.dao.DeviceDAOHibernateImpl" autowire="byName" /><!--sessionFactory will get autowired-->
<bean id="discoveryDAO" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.nso.solution.dao.DeviceDAO</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
<value>deviceDaoTarget</value>
</list>
</property>
</bean>
DeviceDAO est une interface qui contient plusieurs méthodes qui permettent de récupérer, enregistrer et supprimer les objets. DeviceDAOHibernateImpl implémente cette interface, par ex.
public List<Device> getAllDevices() {
return getHibernateTemplate().loadAll(Device.class);
}
J'ai dû marquer cette méthode avec l'annotation @SuppressWarnings ("non cochée").
Merci pour votre réponse. Malheureusement je ne comprends pas comment ça m'aide. Votre solution renvoie toujours la collecte simple. Et traite avec API de niveau inférieur. – AlexR
En tout cas merci de votre référence que vous avez envoyé. Je suis en train de lire les documents et j'espère que je comprendrai ce qu'il faut faire bientôt. – AlexR
Ce n'est pas ma solution, c'est l'exemple de code de Spring. Et non, cela ne concerne pas les api de niveau inférieur, Spring crée, ferme et valide automatiquement les Transactions et les Sessions, il suffit d'appeler getCurrentSession() –