Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧靴&x2B;JPA EntityManager注入失败_Spring_Jpa_Spring Boot_Cdi - Fatal编程技术网

Spring 弹簧靴&x2B;JPA EntityManager注入失败

Spring 弹簧靴&x2B;JPA EntityManager注入失败,spring,jpa,spring-boot,cdi,Spring,Jpa,Spring Boot,Cdi,在我的J2EE应用程序中,我尝试使用SpringBoot和JPA技术,并将EntityManager注入DAO层。然而,我有一些问题。。。我的用户CRUD存储库: @Repository public class UserRepositoryImpl implements UserRepository { @PersistenceContext(unitName = "data") private EntityManager entityManager; // and crud methods

在我的J2EE应用程序中,我尝试使用SpringBoot和JPA技术,并将EntityManager注入DAO层。然而,我有一些问题。。。我的用户CRUD存储库:

@Repository
public class UserRepositoryImpl implements UserRepository {

@PersistenceContext(unitName = "data")
private EntityManager entityManager;
// and crud methods
}
我的spring boot应用程序类:

@SpringBootApplication
public class App {
    public static void main(String [] args) {
        SpringApplication.run(App.class, args);
    }
}

最后是我的persistence.xml,位于src/main/resources/META-INF文件夹中:

<?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>

org.hibernate.jpa.HibernatePersistenceProvider
com.example.domain.User
真的

所以,当我尝试使用这个注入式entityManager时,我得到了NullPointerException。其他@Autowired字段的注入没有任何问题。这个代码怎么了?我需要一些额外的配置吗? 我是一个初学者(甚至不是初级开发人员),我对什么是Spring引导以及如何配置它有一些误解,就像xml文件中的Spring一样。如果由于注入EM而需要这样的xml配置,请演示如何进行

upd2。依赖关系

<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>

org.slf4j
slf4j api
org.hibernate
冬眠核心
org.hibernate
休眠实体管理器
org.hibernate
hibernate-c3p0
org.javassist
javassist
com.microsoft
sqljdbc4
org.quartz-scheduler
石英
2.2.1
com.fasterxml.jackson.core
杰克逊注释
2.5.3
com.opencsv
opencsv
3.3
org.springframework.boot
spring引导启动器数据jpa
1.2.4.1发布
org.springframework.boot
spring启动程序日志记录
org.springframework.boot
spring-boot-starter-log4j
1.2.4.1发布
org.springframework
德克萨斯州春季
4.1.6.1发布
org.springframework.boot
SpringBootStarterWeb
1.2.4.1发布
org.springframework.boot
spring启动程序日志记录

您应该使用spring启动程序数据jpa的依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

(更改驱动程序和其他数据以匹配您的环境)


祝你好运

如果要继续使用persistence.xml文件,只需在配置类中添加以下代码即可

    @Bean
public LocalEntityManagerFactoryBean entityManagerFactory(){
    LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();
    factoryBean.setPersistenceUnitName("data");
    return factoryBean;
}

您可以使用java配置来配置jpa持久性。下面的代码显示了配置的示例:

@Component
public class JpaConfiguration {

    @Bean
    @Primary
    public DataSource dataSource() {

        final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
        dataSource.setDriver(new org.postgresql.Driver());
        dataSource.setUrl("jdbc:postgresql://localhost:5432/users"); 
        dataSource.setUsername("postgres");
        dataSource.setPassword("admin");

        return dataSource;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        jpaVendorAdapter.setGenerateDdl(true);
        jpaVendorAdapter.setShowSql(true);
        jpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQLDialect");

        return jpaVendorAdapter;
    }  

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setPackagesToScan("tn.bergit.crud.entity");
        lef.setDataSource(dataSource());
        lef.setJpaVendorAdapter(jpaVendorAdapter());

        Properties properties = new Properties();
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.jdbc.fetch_size", "100");
        properties.setProperty("hibernate.hbm2ddl.auto", "update");

        lef.setJpaProperties(properties);
        return lef;
    }    


}

您可以在github上看到这个示例()

如果您使用以下命令,那么请求EntityManager的类应该是Springbean

public class Foo {
  @PersistenceContext
  private EntityManager entityManager;
}
在这里,如果您使用new关键字来获取上述Foo类的实例,那么EntityManager将为null


希望这对别人有帮助

发布您的依赖项您是否定义了稍后将注入的
entityManager
bean?您似乎没有定义它。我应该在哪里定义这个bean?你能举个例子吗?谢谢!这有很大帮助,现在读取操作的entityManager不是空的,但是对于注释为@Transactional的方法,它是空的。我是否应该以某种方式配置事务管理器?怎么做?哦,对不起,这是我的错。。。现在一切都很好!谢谢!不幸的是,我遇到了一个新问题:(EntityManager现在已被注入,但事务未被管理。我是否需要在application.properties文件中指定任何其他依赖项或属性?您应该为spring tx
org添加依赖项。SpringFramework我已在帖子中更新了依赖项。使用事务管理器正确吗?
public class Foo {
  @PersistenceContext
  private EntityManager entityManager;
}