Problèmes à l'aide de HibernateTemplate: java.lang.NoSuchMethodError: org.mise en veille prolongée.SessionFactory.openSession()Lorg/hibernate/classique/Session;

Je suis assez nouveau dans le Ressort du monde et je suis allez fou en essayant de l'intégrer Hibernate au Printemps de l'application à l'aide de HibernateTemplate abstrait classe de soutien

J'ai la classe suivante à persister sur la table de base de données:

package org.andrea.myexample.HibernateOnSpring.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="person")
public class Person {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int pid;

private String firstname;

private String lastname;

public int getPid() {
    return pid;
}

public void setPid(int pid) {
    this.pid = pid;
}

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}
}

À côté de ça, j'ai créer une interface nommée PersonDAO dans laquelle je ne définissent mon CRUD méthode.
J'ai donc implémenter cette interface par une classe nommée PersonDAOImpl qui s'étendent au Printemps classe abstraite HibernateTemplate:

package org.andrea.myexample.HibernateOnSpring.dao;

import java.util.List;

import org.andrea.myexample.HibernateOnSpring.entity.Person;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class PersonDAOImpl extends HibernateDaoSupport implements PersonDAO{


public void addPerson(Person p) {
    getHibernateTemplate().saveOrUpdate(p);

}

public Person getById(int id) {
    //TODO Auto-generated method stub
    return null;
}

public List<Person> getPersonsList() {
    //TODO Auto-generated method stub
    return null;
}

public void delete(int id) {
    //TODO Auto-generated method stub

}

public void update(Person person) {
    //TODO Auto-generated method stub

}   

}

(pour le moment je suis en train de mettre en œuvre uniquement les addPerson ())

Ensuite j'ai créer une classe principale de tester le fonctionnement d'insérer un nouvel objet dans la table de base de données:

package org.andrea.myexample.HibernateOnSpring;

import org.andrea.myexample.HibernateOnSpring.dao.PersonDAO;
import org.andrea.myexample.HibernateOnSpring.entity.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {

public static void main(String[] args) {

    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    System.out.println("Contesto recuperato: " + context);

    Person persona1 = new Person();

    persona1.setFirstname("Pippo");
    persona1.setLastname("Blabla");

    System.out.println("Creato persona1: " + persona1);

    PersonDAO dao = (PersonDAO) context.getBean("personDAOImpl");

    System.out.println("Creato dao object: " + dao);

    dao.addPerson(persona1);

    System.out.println("persona1 salvata nel database");
}

}

Comme vous pouvez le voir le PersonDAOImpl classe s'étend HibernateTemplate donc je pense qu'il faut contenir l'opération de réglage de la sessionFactory...

Le problème est que lorsque j'essaie d'exécuter cette classe MainApp-je obtenir de l'exception suivante:

Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
    at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:323)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:235)
    at org.springframework.orm.hibernate3.HibernateTemplate.getSession(HibernateTemplate.java:457)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:392)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:737)
    at org.andrea.myexample.HibernateOnSpring.dao.PersonDAOImpl.addPerson(PersonDAOImpl.java:12)
    at org.andrea.myexample.HibernateOnSpring.MainApp.main(MainApp.java:26)

Pourquoi j'ai ce problème? comment puis-je le résoudre?

Pour être complet j'ai aussi insérer mon pom.xml contenant ma liste de dépendances:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.andrea.myexample</groupId>
<artifactId>HibernateOnSpring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>HibernateOnSpring</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Dipendenze di Spring Framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.1.RELEASE</version>
</dependency>
<dependency>   <!-- Usata da Hibernate 4 per LocalSessionFactoryBean -->
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<!-- Dipendenze per AOP -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Dipendenze per Persistence Managment -->
<dependency>    <!-- Apache BasicDataSource -->
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>    <!-- MySQL database driver -->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.23</version>
</dependency>
<dependency>    <!-- Hibernate -->
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.9.Final</version>
</dependency>
</dependencies>
</project>
HibernateTemplate est assez vieux et Hibernate 4.x ne supporte pas plus. Ne l'utilisez pas.
ok, et ce que j'ai à l'utiliser à sa place?
Vous devriez être en utilisant org.hibernate.SessionFactory à la place (si vous êtes en utilisant Hibernate), vous pouvez mieux gérer les EntityManager.

OriginalL'auteur user2104160 | 2013-02-24