我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot中entityManagerFactory报错的解决方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot中entityManagerFactory报错的解决方法

今天给大家介绍一下springboot中entityManagerFactory报错的解决方法。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。

新建springboot项目entityManagerFactory报错

springboot中entityManagerFactory报错的解决方法

解决办法

查看注解引入是否正确,实体类和jpa的。

检查包的引用是否有冲突

spring生成EntityManagerFactory三种方式

1.LocalEntityManagerFactoryBean

只是简单环境中使用。它使用JPA PersistenceProvider自动检测机制( according to JPA's Java SE  bootstrapping ),并且大多数情况下,你只能定义一下persistence unit name

例如:

<beans><bean id="myEmf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"><property name="persistenceUnitName" value="myPersistenceUnit"/></bean></beans>

2.从JNDI获取EntityManagerFactory

这个选项是当你应用发布在javaee5的服务器中。你可以参阅自己应用服务器文档,如何发布一个自定义的JPA provider到你的应用服务器中。

例:

<beans><jee:jndi-lookup id="myEmf" jndi-name="persistence/myPersistenceUnit"/></beans>

当javaee服务器启动时,会自动检测persistence units。实际上,是检测应用包中的META-INF/persistence.xml 文件和web.xml中的persistence-unit-ref,以及定义的environment naming。我理解就是JNDI的name。

一般应用情景是:

在META-INF/persistence.xml中 使用<jta-data-source>java:/ MySqlDS</jta-data-source> 获取容器发布的Datesource。

transactions是使用的javaee容器支持的JTA系统,例如tomcat中,可以这样

如果你的项目准备部署在tomcat上,要支持jta,则需把相关的包放在tomcat/lib包下

1)jndi配置,可以把jndi的配置放置在  tomcat/conf/Catalina/域名(如localhost)/项目名.xml

文件的Context节点下,如下:

   <Resource name="" auth="Container" type="javax.sql.DataSource"        username=""        password=""       driveClassName="oracle.jdbc.driver.OracleDriver"        url="" maxActive="45" maxIdle="25"/>

 jndi也可以配置在server.xml,context.xml中 

2)jta UserTransaction配置 

在server.xml文件GlobalNamingResources节点下配置如下: 

    <!-- Resource configuration for UserTransaction         use JOTM -->    <Resource name="UserTransaction" auth="Container"        type="javax.transaction.UserTransaction"        factory="org.objectweb.jotm.UserTransactionFactory"        jotm.timeout="60"/>

然后在 项目名.xml 文件的context节点下加:

   <ResourceLink name="UserTransaction"            global="UserTransaction"            type="javax.transaction.UserTransaction"/>

 SPRING 仅仅做的是是把EntityManagerFactory通过依赖注入到应用的object中。如果要管理事务,则使用JtaTransactionManager。

3.LocalContainerEntityManagerFactoryBean

这个选项中,spring扮演了容器的角色。完全掌管JPA。

LocalContainerEntityManagerFactoryBean会根据persistence.xml创造一个PersistenceUnitInfo实现。

<beans><bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="someDataSource"/><property name="loadTimeWeaver"><bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/></property></bean></beans>

不是所有的JPA provider都需要load-time weaving。hibernate就不需要。呵呵。 <property name="loadTimeWeaver">这个就不是必须的了。。

Persistence.xml配置:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"><persistence-unit name="myUnit" transaction-type="RESOURCE_LOCAL"><mapping-file>META-INF/orm.xml</mapping-file><exclude-unlisted-classes/></persistence-unit></persistence>

如何处理多个persistence units。spring提供了PersistenceUnitManager统一管理。

<bean id="pum" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"><property name="persistenceXmlLocations"><list><value>org/springframework/orm/jpa/domain/persistence-multi.xml</value><value>classpath:/my/packagecustom-persistence.xml</value><value>classpath*:META-INF/persistence.xml</value></list></property><property name="dataSources"><map><entry key="localDataSource" value-ref="local-db"/><entry key="remoteDataSource" value-ref="remote-db"/></map></property><!-- if no datasource is specified, use this one --><property name="defaultDataSource" ref="remoteDataSource"/></bean><bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="persistenceUnitManager" ref="pum"/><property name="persistenceUnitName" value="myCustomUnit"/></bean>

dataSources中的key是persistence.xml中配置的datasource名字,value-ref是spring管理的数据源。

另外:

EntityManagerFactory是线程安全的,但是EntityManager不是。

public class ProductDaoImpl implements ProductDao {private EntityManagerFactory emf;@PersistenceUnitpublic void setEntityManagerFactory(EntityManagerFactory emf) {this.emf = emf;}public Collection loadProductsByCategory(String category) {EntityManager em = this.emf.createEntityManager();try {Query query = em.createQuery("from Product as p where p.category = ?1");query.setParameter(1, category);return query.getResultList();}finally {if (em != null) {em.close();}}}}

这样使用有个最大问题就是每次都要创建一个新的entityManager。那么该怎么办?

你可以通过@PersistenceContext获取一个transactional EntityManager("shared EntityManager")。为什么称它为transactional?因为它是一个共享的以及线程安全的当前的transactional EntityManager的一个代理。

public class ProductDaoImpl implements ProductDao {@PersistenceContextprivate EntityManager em;public Collection loadProductsByCategory(String category) {Query query = em.createQuery("from Product as p where p.category = :category");query.setParameter("category", category);return query.getResultList();}}

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

以上就是springboot中entityManagerFactory报错的解决方法的全部内容了,更多与springboot中entityManagerFactory报错的解决方法相关的内容可以搜索编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot中entityManagerFactory报错的解决方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

springboot中entityManagerFactory报错的解决方法

今天给大家介绍一下springboot中entityManagerFactory报错的解决方法。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。新建springb
2023-06-26

springboot集成springCloud中gateway时启动报错的解决方法

本篇内容介绍了“springboot集成springCloud中gateway时启动报错的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
2023-06-20

php中include报错的解决方法

这篇文章将为大家详细讲解有关php中include报错的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php include报错的解决办法:1、检查include文件的位置是否正确;2、检测被包含
2023-06-14

pip中install报错的解决方法

小编给大家分享一下pip中install报错的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!解决方法:1、ReadTimeoutError,在pip安装所
2023-06-20

php中setcookie报错的解决方法

这篇文章主要为大家展示了“php中setcookie报错的解决方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中setcookie报错的解决方法”这篇文章吧。php setcookie报
2023-06-20

springboot连接neo4j报错的解决方案

本文介绍了如何解决SpringBoot连接Neo4j时遇到的报错问题,提供了详细的步骤:检查依赖和版本是否正确。确认连接参数(URI、用户名和密码)是否正确。检查防火墙设置是否允许Bolt连接。验证Neo4j服务器是否正在运行。检查连接池配置是否合理。查看驱动程序日志以获取详细信息。排查常见错误(安全异常、SSL握手异常等)。进行高级故障排除(Telnet测试、CypherShell连接、启用服务器日志)。
springboot连接neo4j报错的解决方案
2024-04-02

mac中php-fpm报错的解决方法

小编给大家分享一下mac中php-fpm报错的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!mac php-fpm报错的解决办法:1、配置“php-fpm.conf”文件;2、修改“php-fpm.conf err
2023-06-14

Django-报错解决方法

无法使用Django新建项目:'django-admin.py’不是内部或外部命令找到site-packages/django/bin(如 D:\Program Files\Anaconda3\Lib\site-packages\djang
2023-01-30

解决PHP中explode函数报错的方法

解决PHP中explode函数报错的方法,需要具体代码示例在PHP中,explode函数是用于将字符串按照指定的分隔符拆分成数组的函数。然而,有时候在使用explode函数时会出现报错的情况,主要是因为传入的参数不符合函数的要求所导致的。
解决PHP中explode函数报错的方法
2024-03-11

php $_get报错的解决方法

这篇文章主要介绍php $_get报错的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php $_get报错的解决办法:使用【array_key_exists(key, 数组)】函数来进行判断,其中参数1为要
2023-06-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录