JDBC 是通过Class.forName("")来实现加载具体数据库实现的,而JPA是如何实现加载具体JPA实现的呢?Persistence.createEntityManagerFactory("mysqljpa")打开该方法的实现:
-
public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) { EntityManagerFactory emf = null; List<PersistenceProvider> providers = getProviders(); for ( PersistenceProvider provider : providers ) { emf = provider.createEntityManagerFactory( persistenceUnitName, properties ); if ( emf != null ) { break; } } if ( emf == null ) { throw new PersistenceException( "No Persistence provider for EntityManager named " + persistenceUnitName ); } return emf; }
它的内部调用了getProviders()方法,该方法用于获取JPA的具体实现:
private static List<PersistenceProvider> getProviders() { return PersistenceProviderResolverHolder .getPersistenceProviderResolver() .getPersistenceProviders(); }
该方法又调用loadResolverClasses();方法,
该方法内部调用ClassLoader.getResources( "META-INF/services/" + PersistenceProvider.class.getName() );及通过类路径下META-INF/services/查找具体实现,查看hibernate-entitymanager-4.3.9.Final.jar存在该javax,persistence.spi.PersistenceProvider文件,打开该文件内容为:
org.hibernate.jpa.HibernatePersistenceProvider # The deprecated provider, logs warnings when used. org.hibernate.ejb.HibernatePersistence
该文件中定义了JPA的具体实现。
相关推荐
07_JPA详解_使用JPA加载_更新_删除对象.zip 07_JPA详解_使用JPA加载_更新_删除对象.zip
springJpa单标递归树形结构
JPA教程JPA教程JPA教程JPA教程JPA教程
jpa jpa规范 jpa源码 jpa jpa规范 jpa源码
jpajpajpajpajpajpajpajpajpajpajpajpajpa
JPA规范实现,用JPA来解决可移植问题
包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注
JPA视频_二级缓存 · 18. JPA视频_JPQL_HelloWorld · 19. JPA视频_JPQL_查询缓存 · 20. JPA视频_JPQL_ORDER BY 和 GROUP BY · 21. JPA视频_JPQL_关联查询 · 22. JPA视频_JPQL_子查询和内建函数 · 23. ...
自己闲着没事,写了个spring jpa的简单实现,主要是数据库中student中的学生信息显示到页面中。实现一个简单的功能。
springboot结合jpa实现分页,动态多条件查询,使用thymeleaf前端渲染数据
11_JPA详解_JPA中的一对多延迟加载与关系维护.zip 11_JPA详解_JPA中的一对多延迟加载与关系维护.zip
11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护.rar
Hibernate、iBATIS、TopLink、Castor JDO、Apache OJB等这么多持久层框架,你还在为学习上面那个框架而苦恼吗?你还为研究下一代是那个而头疼吗?...朋友,学习JPA吧!JPA的出现就是解决您上面的苦恼的。
JPA框架的集成使用 package com.itcast.bean.product; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @...
不错的一个东西 减少实体映射工作量 对java程序员是个不错的东西
SpringDataJpa开发--继承JpaRepository实现简单条件查询示例代码
实现JPA基本数据库操作功能封装 实现基于ASM9,动态生成entity、repository、service、serviceImpl、controller相关.class 可根据库表,一键生成新增、修改删除、查询等接口 实现部分基于mybatis-plus,动态代码生成...
HibernateJPA+Struts2.0+MariaDB实现登录功能
使用JPA的二级缓存的具体实现步骤
jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联...