2016-06-01 1 views
0

Erreur du message: Aucun constructeur avec 1 argument défini dans la classe 'UserDaoImpl' [set config: myProject/contexte web]Aucun constructeur avec 1 argument défini dans la classe 'UserDaoImpl' [set config: myProject/contexte web]

Après avoir lu quelques autres questions similaires, vérifié que dans la classe tous les constructeurs sont nommés avec le même nom de classe, étaient de type modificateur d'accès public et il n'y a pas de type de retour dans le constructeur.

encore ce message d'erreur a été montré dans le hibernate.cfg.xml

<bean id="userDaoImpl" class="com.company.users.dao.UserDaoImpl"> 
    <property name="sessionFactory" ref="sessionFactory"></property>   
</bean> 

Et, voici le code du constructeur de la classe UserDaoImpl.

public UserDaoImpl(SessionFactory sessionFactory) { 
    super(); 
    this.sessionFactory = sessionFactory; 
} 

@Gusman [Addition]

Mise en veille prolongée usine session

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref bean="dataSource"/> 
    </property> 
    <property name="mappingResources"> 
     <list> 
      <value>/resources/hibernate/User.hbm.xml</value> 
      <value>/resources/hibernate/UserRole.hbm.xml</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

@hooknc [Addition]

Voici le code setter dans le fichier UserDaoImpl.

private SessionFactory sessionFactory; 

public SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 
public void setSessionFactory(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 
+0

ma mise en veille prolongée est un peu rouillé, mais * ref = « sessionFactory » * ne doit pas être * ref = "SessionFactory" *? – Gusman

+0

@Gusman Le même identificateur de référence est utilisé comme indiqué dans l'ID de bean de fichier hibernate-cfg.xml, c'est-à-dire id = "sessionFactory". Et le même code a été ajouté dans la question pour votre référence. – Vivaswan

+0

Avez-vous toujours ce problème? – hooknc

Répondre

0

Si vous regardez de plus près votre fichier de configuration de printemps, vous vous voyez vous essayez de définir une propriété sur votre UserDaoImpl. Basé sur votre classe UserDaoImpl vous avez un constructeur qui prend un SessionFactory. L'erreur est provoquée parce que le ressort essaye d'appeler un constructeur de zéro de paramètre sur UserDaoImpl mais il n'y a pas un.

Seul le constructeur prend un SessionFactory.

Si vous modifiez le fichier de configuration de printemps pour utiliser une valeur constructeur à la place, tout devrait fonctionner:

<bean id="userDaoImpl" class="com.company.users.dao.UserDaoImpl"> 
    <constructor-arg name="sessionFactory" ref="sessionFactory"/> 
</bean> 
+0

J'ai testé votre code, mais la même erreur existe. Le code de la méthode Setter & Getter est déjà présent dans le fichier UserDaoImpl et la même chose a été ajoutée dans la question pour votre référence. – Vivaswan

+0

Mis à jour la réponse à (espérons-le) être un peu plus clair sur ce qui se passe réellement et pourquoi. – hooknc