Spring-boot+JPA EntityManager注入失败

2023-11-26

在我的 J2EE 应用程序中,我尝试使用 spring-boot 和 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>

因此,当我尝试使用这个注入的entityManager 时,我得到 NullPointerException。其他@Autowired字段注入没有任何问题。这段代码有什么问题?我需要一些额外的配置吗? 我是一个初学者(甚至不是初级开发人员),我对 Spring-boot 是什么以及如何配置它(例如 xml 文件中的 Spring)确实有一些误解。如果由于注入 EM 需要这样的 xml 配置,请说明如何操作。

更新2。依赖关系

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

您应该使用 spring-boot-starter-data-jpa 的依赖项

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

要使用持久性 xml,您应该按照文档中的说明定义一个 bean。

Spring 不需要使用 XML 来配置 JPA 提供程序,并且 Spring Boot 假设您想要利用该功能。如果您更喜欢使用 persistence.xml,那么您需要定义自己的 LocalEntityManagerFactoryBean 类型的 @Bean(id 为“entityManagerFactory”),并在那里设置持久性单元名称。

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html#howto-use-traditional-persistence-xml

或者您可以完全跳过 persistence.xml 并在 application.properties 文件中定义连接属性。

引用自文档

DataSource 配置由 spring.datasource.* 中的外部配置属性控制。例如,您可以在 application.properties 中声明以下部分:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-Production-database

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

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring-boot+JPA EntityManager注入失败 的相关文章

随机推荐

  • Safari 上的 HTML5 音频标签有延迟

    我正在尝试使用 html 标签来完成一个简单的类似涂鸦的行为 其中点击时会响起 mp3 ogg 声音 它应该可以在 Firefox Safari 和 iPad Safari 下运行 这是非常理想的 我尝试了很多方法 最终得出以下结论 HTM
  • Google Calendar Api,会议室可用吗?

    如何列出特定日期时间的特定日历资源 房间 的可用性 就像如果我想列出会议室的所有今天活动 跨今天预订会议室的所有用户帐户活动 哪个谷歌日历 api 调用可以给我这个 我从 Google 日历资源 api 获取房间详细信息 但无法获取不同帐户
  • 是否需要“do {...} while ( )”循环?

    Bjarne Stroustrup C 创建者 曾经说过 他避免使用 do while 循环 而更喜欢用 while 循环来编写代码 参见下面的引用 自从听到这件事后 我发现这是真的 你怎么看 有没有一个例子 其中 do while 比使用
  • Socket.IO:XHR 轮询断开连接延迟

    我正在使用 socket io 和 node js 我在跟踪哪些用户在线时遇到问题 因为套接字 IO 识别 XHR 轮询客户端已断开连接之前有几秒钟的延迟 如果 XHR 轮询客户端刷新页面 他们的新连接消息似乎先于断开连接消息 当尝试跟踪哪
  • 如何使用open id作为登录系统

    我想尝试在我要创建的网站上使用开放 ID 作为登录系统 我已经查看了这个网站 但我不太确定这一切是如何运作的以及如何使其发挥作用 http remysharp com 2007 12 21 how to integrate openid a
  • 使用 SonarQube 5.2 构建 Breaker 插件

    似乎是构建断路器插件不再与 SonarQube 5 2 兼容 如果声纳门未满足 是否有任何替代方案可以避免 VSO 构建失败 或者是否计划将 Build Breaker 插件更新到 5 2 目前 没有任何插件会在质量门未通过时破坏构建声纳Q
  • 如何获取菜单项的操作视图?

    这是我的代码 home xml
  • 可以选择在 Angular 4 中应用 http 拦截器

    以下 url 解释了如何在 Angular 4 中使用 http 拦截器 https angular io guide http intercepting all requests or responses 但是 我想知道是否有什么方法可以
  • 使用 Microsoft Graph API 创建“作为在线会议的活动”或仅创建在线会议

    任何在特定租户下登录我们系统 IdentityServer 作为身份验证 的用户都应该能够创建在线会议 MS Teams 活动 我们跟随使用 Microsoft Graph 构建 ASP NET Core MVC 应用程序 and 创建并启
  • 使用mockito模拟构造函数

    我想将构造函数模拟为方法 public String generaID GeneraIDParaEntidadCliente aux new GeneraIDParaEntidadCliente nombre registro entida
  • 将 seeds.rb 分成多个部分?

    我想将 seeds rb 文件分成多个部分以便于维护 将所有 A 种子放入 a rb 中 将 B 种子放入 b rb 中 等等 单独的文件位于 db 目录中 包含 seeds rb 每个文件都包含一堆 A create 或 B create
  • 如何从频繁访问的表中删除多行

    我需要删除一个非常大的表 例如 500 万行 的大部分 例如 90 该表的另外 10 被频繁读取 但不被写入 From 按 ID 删除数百万行的最佳方法 我认为我应该删除要删除的 90 上的所有索引 以加快该过程 除了我用来选择要删除的行的
  • 在 Swift WKWebView 中捕获 window.postMessage

    我正在开发一个 swift ios 应用程序 它使用WKWebView加载电子商务网站 当用户在这里购买产品时 结帐页面允许用户用加密货币付款 当用户点击 在钱包中打开 时 网站会弹出一个 window postMessage paymen
  • 转置数据框,将第一列保持为标题

    我有一个大数据框 但小例子如下 mydf lt data frame A c letters 1 10 M1 c 11 20 M2 c 31 40 M3 c 41 50 我想转置数据框并将第 1 列 A 保留为列标题 字母 1 10 作为变
  • 减小 Cordova apk 的大小

    我正在开发一个混合应用程序 现在我在phonegap和cordova之间陷入了困境 Cordova 现在在我的电脑中 当我执行 cordova build android 我得到的 apk 大小为 3 7 mb 不过 如果我使用 build
  • iPhone/iOS:如何判断手机在运行时使用的本地化版本?

    我在本地化应用程序时遇到了困难 它需要本地化为波斯语 伊朗波斯语 不仅如此 当选择 fa IR 作为本地化时 它还需要使用阳历 该操作系统有一个波斯日历 我使用它没有问题 但我需要知道fa IR本地化已被选择 雪上加霜的是 我无法在美国测试
  • 远程 gdb 调试不会在断点处停止

    我在调试修改后的 Linux 3 11 0 内核时遇到问题 为了调试代码 我使用 GDB 7 6 QEMU 1 6 5 Linux内核3 11 0 我的系统有 Intel R Core TM i7 2760QM CPU 2 40GHz 运行
  • “aapt”错误。预编译器构建中止

    我使用 Eclipse 4 2 2 和 Android SDK 22 0 1 构建一个使用 Facebook 和 Google Play 服务库的 Android 应用程序 然而我遇到了一个问题 每次我包含一个或两个库时 aapt 详细模式
  • 文件上传在 Primefaces 中不起作用

    我有一些问题
  • Spring-boot+JPA EntityManager注入失败

    在我的 J2EE 应用程序中 我尝试使用 spring boot 和 JPA 技术 并将 EntityManager 注入到 DAO 层 但是 我有一些问题 我的用户 CRUD 存储库 Repository public class Use