,,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(实体管理器);

}

}

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: