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!
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
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes absent de la configuration de dire du printemps à la recherche pour les annotations (ajoutez ce qui suit n'importe où entre les
<beans>
élément:Et peut-être que vous aussi besoin d'ajouter la suivante en précisant le paquet, où vous avez le DAO. Mais je ne pense pas que ce soit nécessaire.
OriginalL'auteur Augusto
ce travail est le morceau de code:
Spring.xml:
Dao bean:
Persistence.xml:
persistence-unit name est juste pour unique identiier de votre entityManagerFactory. Ceci est utile lorsqu'une application est de configurer plusieurs bases de données/source de données. Vous pouvez donner n'importe quel nom.
OriginalL'auteur dyrkin