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
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en utilisant des Ressorts Hibernate4 soutien
Plus de détails ici:
http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/
hibernate4.support.HiberbateDaoSupport
HiberbateDaoSupport obsolète depuis la version 3 et la version 4, il est supprimé
OriginalL'auteur user1329931
Depuis
HibernateTemplate
n'est plus pris en charge dans Hibernate 4.x et mon projet actuel est rongée par l'utilisation deHibernateTemplate
j'ai choisi de créer et d'utiliser mon propreHibernateTemplate
.Plutôt que de l'étendre
HibernateDaoSupport
j'ai juste ajouté ungetHibernateTemplate()
méthode à mon DAO. Dans mon customHibernateTemplate
j'utilise ensuite laorg.hibernate.SessionFactory
pour effectuer les mêmes opérations.OriginalL'auteur Gibado