JPA之EntityManager踩坑及解决-更改PersistenceContext

JPA之EntityManager踩坑及解决:更改PersistenceContext

这篇文章主要介绍了作业的装配区(JobPackArea)之实体经理踩坑及解决:更改持久性上下文方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

目录

JPAEntityManager踩坑之更改持久性上下文一、原因二、春季作业的装配区(JobPackArea)多数据源怎么使用实体经理三、使用EntityManager @持久性上下文(unitName= EntityManager factory )

JPA EntityManager踩坑之更改PersistenceContext

一、原因

项目中配置两个春季作业的装配区(JobPackArea)的数据源,使用实体经理的时候默认是选择第一个,导致查询不到第二个数据源的数据。

二、Spring JPA多数据源怎么使用EntityManager

1.春季作业的装配区(JobPackArea)多数据源的配置请查看此文章:SpringData JPA基本/高级/多数据源使用

2.引入EntityManager:

@持久性上下文(unitName= primaryPersistenceUnit )

私有实体管理器实体管理器;

@PersistenceContext中的单位名称指的是使用哪一个数据源的持久性单元,持久性单元是在配置数据源的时候配置的,每一个数据源的持久性单元都是不一样的,这样就可以使用不同的数据源来查询数据了。

配置持久性单元:

@ Bean(name= entityManagerFactoryPrimary )

@主要

公共localcontainereentitymanagerfactorybean entitymanager factoryprimary(EntityManagerFactoryBuilder生成器){

退货生成器。数据源(主数据源)。属性(供应商属性)。包( com.neo.model) //设置实体类所在位置。持久性单元(“primaryPersistenceUnit”)。build();

}

三、使用EntityManager

String SQL=select id,code,name, desc from drgo _ cd10 _ dx _ code where name like( % content。trim() % )

伐木工。info( search getProductOwnerId SQL: SQL );

查询query=entitymanager。createnativequery(SQL);

ListObject[]dbList=query。获取结果列表();

listic D10 codedata结果列表=new ArrayList D10 codedata();

if (dbList!=null dbList.size()0){

for(int I=0;IDB列表。size();i ){

object[]o=dblist。get(I);

String id=o[0]==null?o[0].toString();

字符串代码=o[1]==null?当前位置.toString();

String name=o[0]==null?当前位置.toString();

字符串desc=o[1]==null?当前位置.toString();

ICD 10码数据tempCode=新ICD 10码数据(long。解析长(id),代码,名称,desc);

结果列表。add(tempCode);

}

}

@PersistenceContext(unitName = "entityManagerFactory")

@配置

@ EnableTransactionManagement(mode=建议模式.ASPECTJ,proxyTargetClass=true)

@组件可以({ cn。com。appname。manager,cn.com.appName.dao,cn.com.appName.dao.jpa})

公共类AppConfig扩展了抽象管理者

{

@ Bean(name= entitymanager factory )

公共localcontainereentitymanager factorybean entitymanager factorybean()

{

localcontainereentitymanagerfactorybean工厂bean=new localcontainereentitymanagerfactorybean();

工厂豆。设置数据源(数据源(空));

工厂豆。setpackagestoscan(新字符串[]{ cn。 com AppConfig .应用程序名称 .实体 });

hibernatejpavendoraadapter vendorAdapter=new hibernatejpavendoraadapter();

供应商适配器。设置数据库平台(hibernate方言);

if (logger.isDebugEnabled())

{

//供应商适配器。setshowsql(true);

//供应商适配器。setgenerateddl(true);

}

//供应商适配器。setgenerateddl(true);

工厂豆。setjpavendoradapter(vendorAdapter);

//工厂bean。setjpaproperties(this。additionlproperties());

返回工厂Bean

}

}

公共抽象类MyBaseDaoE扩展BaseEntity扩展BaseDaoJpaE

{

受保护的MyBaseDao()

{ }

//unitName与localcontainereentitymanagerfactorybean类的容器对象的名称一致

@持久性上下文(unitName= entitymanager factory )

public void setJpaEntityManager(EntityManager EntityManager)

{

超级棒。setentitymanager(实体管理器);

}

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

JPA之EntityManager踩坑及解决-更改PersistenceContext