Spring-boot+EntityManager injecter échoue
Dans mon application J2EE j'essaie d'utiliser spring-boot et JPA technologies avec injection de EntityManager dans la couche DAO. Cependant, j'ai quelques problèmes... Mon référentiel pour l'utilisateur CRUD:
@Repository
public class UserRepositoryImpl implements UserRepository {
@PersistenceContext(unitName = "data")
private EntityManager entityManager;
//and crud methods
}
Mon printemps-boot classe d'application:
@SpringBootApplication
public class App {
public static void main(String [] args) {
SpringApplication.run(App.class, args);
}
}
Et enfin mon persistence.xml, situé dans src/main/resources/META-INF du dossier:
<?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="data" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.example.domain.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.autocommit" value="false" />
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
<property name="hibernate.c3p0.min_size" value="4" />
<property name="hibernate.c3p0.max_size" value="128" />
<property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1433;databaseName=qwerty;sendStringParametersAsUnicode=false" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>
Donc, quand j'ai essayer d'utiliser cette injection entityManager-je obtenir NullPointerException. Autres @Autocâblés champs sont injectés sans aucun problème. Quel est le problème avec ce code? Ai-je besoin d'une configuration supplémentaire?
Je suis un débutant (même pas un développeur Junior) et j'ai une certaine incompréhension de ce Printemps-boot est et comment le configurer, comme le Printemps dans le fichier xml. Si une telle configuration xml est nécessaire en raison d'injecter de l'EM, s'il vous plaît, montrer comment le faire.
upd2. Dépendances
<dependencies>
<!-- logger -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!-- db -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>sqljdbc4</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.3</version>
</dependency>
<!-- csv -->
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>3.3</version>
</dependency>
<!-- spring-boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.2.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.2.4.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Vous avez défini
entityManager
bean qui sera injecté plus tard? Il ne semble pas que vous l'avez défini.Où dois-je définir ce bean? Pouvez-vous me donner un exemple?
OriginalL'auteur goldaniga | 2015-06-10
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser la dépendance pour le printemps-amorçage-starter-data-jpa
Et l'utilisation d'une persistance xml, vous devez définir un bean comme il est dit dans la documentation.
http://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html#howto-use-traditional-persistence-xml
Ou vous pouvez passer de l'persistence.xml entièrement et de définir les propriétés de la connexion dans l'application.fichier de propriétés.
Citation de la documentation
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database
(changer de pilote et d'autres données pour correspondre à votre environnement)
Bonne chance!
Oh, désolé, c'est mon erreur... Tout est grand maintenant! Merci beaucoup!
Ok cool, heureux d'entendre ça fonctionne 🙂
Malheureusement, j'ai un nouveau problème 🙁 EntityManager est maintenant de l'injection, mais les transactions ne sont pas gérés. Ai-je besoin de spécifier toutes autres dépendances ou des biens en application.fichier de propriétés?
Vous devez ajouter la dépendance pour le printemps-tx
<groupId>org.springframework</groupId><artifactId>spring-tx</artifactId>
. Jetez un oeil ici printemps.io/guides/gs/gestion-transactionsOriginalL'auteur stalet
vous pouvez utiliser java configuration afin de configurer persistance jpa. Le code soufflet vous montrer l'échantillon exemple de configuration:
Vous pouvez voir cet exemple sur github (cliquez ici)
OriginalL'auteur BERGUIGA Mohamed Amine
si vous souhaitez continuer à l'utiliser persistence.xml fichier il suffit d'ajouter le code ci-dessous dans votre classe de configuration
OriginalL'auteur vedat