这篇文章主要介绍了作业的装配区(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(实体管理器);
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。