返回顶部
首页 > 资讯 > 精选 >springboot中entityManagerFactory报错的解决方法
  • 332
分享到

springboot中entityManagerFactory报错的解决方法

2023-06-26 06:06:19 332人浏览 独家记忆
摘要

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

今天给大家介绍一下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报错的解决方法相关的内容可以搜索编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下编程网!

--结束END--

本文标题: springboot中entityManagerFactory报错的解决方法

本文链接: https://lsjlt.com/news/307315.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springboot中entityManagerFactory报错的解决方法
    今天给大家介绍一下springboot中entityManagerFactory报错的解决方法。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。新建springb...
    99+
    2023-06-26
  • 新建springboot项目时,entityManagerFactory报错的解决
    目录新建springboot项目entityManagerFactory报错解决办法spring生成EntityManagerFactory三种方式1.LocalEntityMana...
    99+
    2024-04-02
  • springboot中报错Invalidcharacterfoundintherequest的解决
    目录解决Invalid character found in the request问题原因springboot项目报错问题原因有两种解决方法解决Invalid character ...
    99+
    2024-04-02
  • springboot集成springCloud中gateway时启动报错的解决方法
    本篇内容介绍了“springboot集成springCloud中gateway时启动报错的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2023-06-20
  • php中include报错的解决方法
    这篇文章将为大家详细讲解有关php中include报错的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php include报错的解决办法:1、检查include文件的位置是否正确;2、检测被包含...
    99+
    2023-06-14
  • php中setcookie报错的解决方法
    这篇文章主要为大家展示了“php中setcookie报错的解决方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中setcookie报错的解决方法”这篇文章吧。php setcookie报...
    99+
    2023-06-20
  • pip中install报错的解决方法
    小编给大家分享一下pip中install报错的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!解决方法:1、ReadTimeoutError,在pip安装所...
    99+
    2023-06-20
  • SpringBoot整合thymeleaf 报错的解决方案
    近日 在springboot项目中使用thymeleaf时,莫名报了以下错误: 在网上查找文章明白了报错的原因,这是由于如果使用thymeleaf 为模板,那么解析时就要求html...
    99+
    2024-04-02
  • 解决SpringBoot中@Email报错问题
    JSR303校验相关 现象:在springboot中使用@Email注解进行数据校验时,报没有该注解的错误。 解决方法: 在pom.xml中加该配置 <dependenc...
    99+
    2024-04-02
  • mac中php-fpm报错的解决方法
    小编给大家分享一下mac中php-fpm报错的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!mac php-fpm报错的解决办法:1、配置“php-fpm.conf”文件;2、修改“php-fpm.conf err...
    99+
    2023-06-14
  • springboot整合jwt过期时间报错解决方法
    Exception in thread "main" io.jsonwebtoken.ExpiredJwtException: JWT expired at 2021-12-20T10:09:10Z. Current time: 2023-...
    99+
    2023-09-14
    spring boot java intellij-idea Powered by 金山文档
  • Django-报错解决方法
    无法使用Django新建项目:'django-admin.py’不是内部或外部命令找到site-packages/django/bin(如 D:\Program Files\Anaconda3\Lib\site-packages...
    99+
    2023-01-30
    报错 解决方法 Django
  • SpringBoot启动yaml报错的解决
    SpringBoot启动yaml报错 报错找不到org.yaml里的一个方法 10:45:54.742 [main] ERROR org.springframework.boot...
    99+
    2024-04-02
  • mysql5.7 报错1055的解决方法
    这篇文章将为大家详细讲解有关mysql5.7 报错1055的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql5.7报错1055的解决办法:首先找到并打开m...
    99+
    2024-04-02
  • ORA-01756报错的解决方法
    今天就跟大家聊聊有关ORA-01756报错的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 今天在尝试执行一个...
    99+
    2024-04-02
  • php $_get报错的解决方法
    这篇文章主要介绍php $_get报错的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php $_get报错的解决办法:使用【array_key_exists(key, 数组)】函数来进行判断,其中参数1为要...
    99+
    2023-06-09
  • 解决PHP中explode函数报错的方法
    解决PHP中explode函数报错的方法,需要具体代码示例 在PHP中,explode函数是用于将字符串按照指定的分隔符拆分成数组的函数。然而,有时候在使用explode函数时会出现报...
    99+
    2024-03-11
    错误处理 php函数 字符串分割
  • springBoot启动报错log4j冲突的解决方案
    springBoot启动报错log4j冲突 先上一段报错内容 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: ...
    99+
    2024-04-02
  • 详解BadTokenException报错解决方法
    线上出现了如上的 crash,第一解决反应是在 show dialog 之前做个 isFinish 和 isDestroyed 判断,当我翻开代码正要解决时,我惊了,原来已经做过了...
    99+
    2024-04-02
  • ORA-01102 报错解决方法
    开库提示  ORA-01102: cannot mount database in EXCLUSIVE mode这个错误主要是lk<SID>文件造成的,该文件位于ORALCE_HOME...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作