Printemps + JPA + Hibernate

Je suis novice dans le Printemps. Je suis en train de configuration simple application web avec Spring 3.1.3 et JPA 2.0
J'ai ajouté toutes les libs nécessaires à la WEB-INF/lib. Il n'y a pas d'erreur pendant le démarrage mais entityManager dans mon DaoImpl fichier est null.
Donc, c'est ma configuration:

persistance.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="fcmsServer" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
</persistence>

fcms-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- the application context definition for the fcmsServer DispatcherServlet -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="fcmsServer" />
<property name="dataSource" ref="dataSource" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.H2Dialect" />
</bean>
</property>
<property name="persistenceUnitManager">
<bean
class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="defaultDataSource" ref="dataSource" />
</bean>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:tcp://localhost/~/fcms" />
<property name="username" value="sa" />
<property name="password" value="sa" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="persistenceAnnotation"
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="userDao" class="fcms.data.user.UserDAOImpl">
</bean>
<bean name="/user.htm" class="fcms.controller.UserController">
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

DaoImpl classe:

@Repository
public class UserDAOImpl implements UserDAO {
@PersistenceContext(unitName = "fcmsServer")
private EntityManager entityManager;
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
public User getUserById(long id) {
return entityManager.find(User.class,id);
}
@Override
public void addUser(User u) {
entityManager.persist(u);
}
}

De l'utilisateur de la classe

@Entity
@Table(name = "User")
public class User implements Serializable {
@Id  @GeneratedValue
private long id;
@Column(name = "lastName", nullable = false)
private String lastName;
@Column(name = "firstName", nullable = false)
private String firstName;
@Column(name = "birthDate", nullable = true)
private Date birthDate;
private static final long serialVersionUID = 1L;

}

Donc, lorsque j'essaie d'appeler la commande addUser() dans UserController, j'ai NullPointerException lors de persister.

Plus de détails. Quand j'ai essayé d'obtenir de l'entityManager manuellement: EntityManager em = Persistance.createEntityManagerFactory("fcmsServer").createEntityManager(); j'ai de l'exception suivante: org.mise en veille prolongée.HibernateException: Connexion ne peut pas être null lors de la " mise en veille prolongée.le dialecte n'est pas définie, Peut-être que c'est la cause..
Votre configuration pour votre entityManager n'est pas correct. Et, vous ne devriez pas avoir besoin d'utiliser le punit nom pour obtenir le PersistenceContext puisque vous ne travailler qu'avec un seul. Voici une étape par étape tutoriel de exactement ce que vous essayez de faire: pluralsight.com/training/Courses/TableOfContents/...
Essayez d'utiliser le Printemps de Démarrage dans votre prochain projet! Vous serez probablement en mesure d'éviter tous ces problèmes!

OriginalL'auteur Mikhail S | 2013-02-13