日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean

發(fā)布時(shí)間:2023/11/30 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spring和Hibernate整合的時(shí)候我們經(jīng)常會(huì)有如下的配置代碼

1,非JPA支持的配置

<!-- 配置 Hibernate 的 SessionFactory 實(shí)例: 通過 Spring 提供的 LocalSessionFactoryBean 進(jìn)行配置 -->

?? ?<!-- FacotryBean 配置的時(shí)候返回的不是本身而是返回的FactoryBean 的 getObject()方法返回的對(duì)象,此處是sessionFactory(Hibernate的類),用來(lái)創(chuàng)建session 進(jìn)行數(shù)據(jù)庫(kù)操作 -->

?? 我們配置LocalSessionFactoryBean 得到的是LocalSessionFactoryBean?的getObject方法返回SessionFactory,SessionFactory用來(lái)創(chuàng)建session來(lái)進(jìn)行數(shù)據(jù)庫(kù)的操作

?? ?<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
?? ??? ?<!-- 配置數(shù)據(jù)源屬性 -->
?? ??? ?<property name="dataSource" ref="dataSource"></property>
?? ??? ?<!-- 配置 hibernate 配置文件的位置及名稱 -->
?? ??? ?<!-- ?
?? ??? ?<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
?? ??? ?-->
?? ??? ?<!-- 使用 hibernateProperties 屬相來(lái)配置 Hibernate 原生的屬性 -->
?? ??? ?<property name="hibernateProperties">
?? ??? ??? ?<props>
?? ??? ??? ??? ?<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
?? ??? ??? ??? ?<prop key="hibernate.show_sql">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.format_sql">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.hbm2ddl.auto">update</prop>
?? ??? ??? ?</props>
?? ??? ?</property>
?? ?????<!-- 配置 hibernate 映射文件的位置及名稱, 可以使用通配符 -->
?? ?????<property name="mappingLocations"?

?? ??? ??? ?value="classpath:com/atguigu/spring/hibernate/entities/*.hbm.xml">

?????? </property>

?

?

????? ?<!-- 配置 hibernate 實(shí)體Bean的映射,如果缺少此項(xiàng)內(nèi)容則不會(huì)創(chuàng)建表,創(chuàng)建表的過程是在生成容器的時(shí)候同時(shí)生成表 -->

?????? <和上邊配置xml類型的實(shí)體bean二選一就可以了>

???????<property name="annotatedClasses">
?? ??? ?? <list>
?? ??? ? ??? ??? ?<value>com.marshallee.entities.Account</value>
?? ??? ?? </list>
?? ??? ?</property>

?? ?</bean>

?

2,JPA支持的配置

同樣我們配置.LocalContainerEntityManagerFactoryBean得到的是.LocalContainerEntityManagerFactoryBean?的getObject方法返回EntityManagerFactory,EntityManagerFactory用來(lái)創(chuàng)建EntityManager來(lái)進(jìn)行數(shù)據(jù)庫(kù)的操作

<bean id="entityManagerFactory"
?? ??? ?class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

?? ??? ?<property name="jpaVendorAdapter">
?? ??? ??? ?<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
?? ??? ??? ??? ?<property name="showSql" value="true" />
?? ??? ??? ??? ?<property name="generateDdl" value="true" />
?? ??? ??? ??? ?<property name="databasePlatform" value="${db.dialect}" />
?? ??? ??? ?</bean>
?? ??? ?</property>
?? ??? ?<property name="jpaProperties">
?? ??? ??? ?<props>
?? ??? ??? ??? ?<!-- base -->
?? ??? ??? ??? ?<prop key="hibernate.hbm2ddl.auto">update</prop>
?? ??? ??? ??? ?<prop key="hibernate.transaction.flush_before_completion">true</prop>
?? ??? ??? ??? ?<!-- show_sql -->
?? ??? ??? ??? ?<prop key="hibernate.show_sql">false</prop>
?? ??? ??? ??? ?<!-- cache -->
?? ??? ??? ??? ?<prop key="hibernate.cache.use_query_cache">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.cache.use_second_level_cache">true</prop>
?? ??? ??? ??? ?<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
?? ??? ??? ??? ?<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
?? ??? ??? ??? ?</prop>
?? ??? ??? ?</props>
?? ???? </property>
?? ?</bean>

?

?

“jpaVendorAdapter屬性用于指明所使用的是哪一個(gè)廠商的JPA實(shí)現(xiàn)。Spring提供了多個(gè)JPA廠商適配器:

EclipseLinkJpaVendorAdapter
HibernateJpaVendorAdapter
OpenJpaVendorAdapter
TopLinkJpaVendorAdapter(在Spring 3.1版本中,已經(jīng)將其廢棄了)”

摘錄來(lái)自: [美] Craig Walls. “Spring實(shí)戰(zhàn)(第4版)”。 iBooks.?

?

只要記住一點(diǎn)當(dāng)我們配置FactoryBean后,當(dāng)調(diào)用getBean(beanName)的時(shí)候我們得到的是FactoryBean.getObject返回的對(duì)象,如果我們要得到FactoryBean本身則需要在調(diào)用getObject的時(shí)候加上引用'&' 如 ?getBean(&beanName)

這里涉及到FactoryBean?和BeanFactory?的區(qū)別參考:http://chenzehe.iteye.com/blog/1481476

?


容易混淆的地方

persistence.xml是JPA規(guī)范要求的,在應(yīng)用程序管理類型的JPA中我們需要配置persistence.xml?中的數(shù)據(jù)源內(nèi)容用PersistenceProvider來(lái)生成一個(gè)EntityManagerFactory,但是在“容器管理類型的JPA" 中?”當(dāng)運(yùn)行在容器中時(shí),可以使用容器(在我們的場(chǎng)景下是Spring)提供的信息來(lái)生成EntityManagerFactory。你可以將數(shù)據(jù)源信息配置在Spring應(yīng)用上下文中,而不是在persistence.xml中了,盡管數(shù)據(jù)源還可以在persistence.xml中進(jìn)行配置,但是這個(gè)屬性指定的數(shù)據(jù)源具有更高的優(yōu)先級(jí).

綜上可以理解為如果我們選擇在spring上下文中配置數(shù)據(jù)源信息,則不需要再persistence.xml中配置了,即使配置了在容器類型的JPA中,容器會(huì)優(yōu)先選擇容器上下文中的配置信息,但是persistence,xml這個(gè)文件還是必須要有的,可以是空的配置,但必須要有,這是JPA的要求,

轉(zhuǎn)載于:https://www.cnblogs.com/onlymate/p/7568572.html

總結(jié)

以上是生活随笔為你收集整理的Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。