- 浏览: 316099 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
bqlin1987:
请问是不是ITeye的代码莫名的换行了?
学习SSO-1 Tomcat启用ssl -
a6821122:
在data-config.xml 里的javascript 不 ...
solr导入Oracle日期时间数据的处理 -
jie_kong:
是flexigrid不是flexgrid
FlexGrid自己用的经验 -
zjnbshifox:
呵呵,我也在摸索阶段,谢谢提醒ligywin 写道还需要补充以 ...
CAS自定义Credentials登录 -
ligywin:
还需要补充以下方法import org.apache.comm ...
CAS自定义Credentials登录
系统总是离不开数据的持久化,说起来用hibernate的时间也不短了,从2.x就在用,现在已经到3.1了,不过为了符合标准,只是把 hibernate作为持久化的提供者,以前使用的是hibernate的EJB实现还有spring的Annotation事务,配置一般都是:
[hibernate.cfg.xml]--hibernate的配置文件,配置数据库连接,用户,密码等等
<hibernate-configuration><session-factory><mapping class="com.jl.domain.Customer">
[spring-dao.xml] spring的配置文件,配置了事务处理,dao及service
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"><bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"><bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><bean id="ActivemqMsgDAO" class="com.jl.example.dao.ActivemqMsgDAO"><bean id="activeMsgService" class="com.jl.example.service.ActiveMsgService">
本来这样已经万事大吉,一般的使用也都是这样在用的,不过,我们这里情况有点特殊,
我们的系统比较大,会分成很多的子系统,每个子系统都由不同的人负责,每个子系统
都会使用一个公共数据源也有可能使用不同的数据源,而且由于配置管理的改进,每个
子系统的负责人员之间最好互不影响,最好每个子系统的人员都使用各自的配置文件,
公用的配置文件放到统一的位置,只需要在启动的时候把所有文件加载……,不过问题出
现了:
1、貌似<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
在所有文件中只允许有一个,这个好办,放到公用的文件里面去
2、spring由于每个子系统都会使用公用的连接池,但会映射不同的表,貌似spring的2个TransactionManager
检测到使用统一的数据源的话是不行的,会出错,这就要求把TransactionManager也放到公用配置文件里面去,
可是,如果这样的话,势必导致所有的人都可以修改公用配置文件,和配置管理的原则不符……,而且,这样子
的话每个子系统的hibernate.cfg.xml配置文件还是要各子系统自己维护,会产生多个,而一个
org.springframework.orm.hibernate3.LocalSessionFactoryBean,又貌似只支持一个hibernate配置文件
(spring 1.2.x)
还有虽然号称是使用EJB3的规范,但是还是使用的hibernate让自己心里有点别扭
这么多的貌似和自己的别扭,搞得挺烦的,不过听说最近出了JPA的规范,spring也支持,虽然还是spring2.0的m2,
拿来先用再说,呵呵</bean></bean></bean></bean></property> </bean></bean></bean></property> </bean></mapping></session-factory></hibernate-configuration>
[hibernate.cfg.xml]--hibernate的配置文件,配置数据库连接,用户,密码等等
<hibernate-configuration><session-factory><mapping class="com.jl.domain.Customer">
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <property name="hibernate.hbm2ddl.auto">create-drop</property>
- <!--这里的create-drop会每次在系统启动的时候根据映射把数据表重新删除再建立一遍,在一般使用的时候可以设置为auto -->
- <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
- <property name="hibernate.cglib.use_reflection_optimizer">true</property>
- <property name="default-lazy">false</property>
- <property name="show_sql">true</property>
- <!-- 用于hibernate持久化的对象" -->
- <mapping class="com.jl.domain.Customer"/>
- <mapping class="com.jl.domain.Order"/>
- <mapping class="com.jl.domain.LineItem"/>
- <!-- 用于hibernate已经定义的事件" -->
- <!--<listener type="pre-update" class="org.hibernate.validator.event.ValidatePreUpdateEventListener"/>
- <listener type="pre-insert" class="org.hibernate.validator.event.ValidatePreInsertEventListener"/> -->
- </session-factory>
- </hibernate-configuration>
[spring-dao.xml] spring的配置文件,配置了事务处理,dao及service
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"><bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"><bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><bean id="ActivemqMsgDAO" class="com.jl.example.dao.ActivemqMsgDAO"><bean id="activeMsgService" class="com.jl.example.service.ActiveMsgService">
xml 代码
- <!--如果自己定义连接池,datasource可以这样配置-->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName">
- <value>org.postgresql.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:postgresql:activemq</value>
- </property>
- <property name="username">
- <value>root</value>
- </property>
- <property name="password">
- <value>800314</value>
- </property>
- </bean>
- <!--datasource完毕-->
- <!--用已经配置好的连接池的话,可以这样-->
- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName"><value>java:comp/env/jdbc/opendb</value></property><!--这里是数据源名称-->
- </bean>
- <!--datasource完毕-->
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory"><ref bean="sessionFactory"/></property>
- <property name="dataSource"><ref bean="dataSource"/></property>
- </bean>
- <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
- <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
- <property name="transactionInterceptor"><ref bean="transactionInterceptor"/></property>
- </bean>
- <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
- <property name="transactionManager"><ref local="transactionManager"/></property>
- <property name="transactionAttributeSource">
- <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
- </property>
- </bean>
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource"><ref local="dataSource"/></property>
- <property name="configurationClass"><value>org.hibernate.cfg.AnnotationConfiguration</value></property>
- <property name="configLocation"><value>/WEB-INF/hibernate.cfg.xml</value></property> <!--这里是刚才hibernate配置文件的位置-->
- </bean>
- <!--下面就是把自己的DAO和service放进来就可以了-->
- <bean id="ActivemqMsgDAO" class="com.jl.example.dao.ActivemqMsgDAO">
- <!--dao需要继承自org.springframework.orm.hibernate3.support.HibernateDaoSupport,才可以访问hibernate的上下文-->
- <property name="sessionFactory">
- <ref local="sessionFactory"/>
- </property>
- </bean>
- <bean id="activeMsgService" class="com.jl.example.service.ActiveMsgService">
- <property name="activemqdao"><ref local="ActivemqMsgDAO"/></property>
- </bean>
本来这样已经万事大吉,一般的使用也都是这样在用的,不过,我们这里情况有点特殊,
我们的系统比较大,会分成很多的子系统,每个子系统都由不同的人负责,每个子系统
都会使用一个公共数据源也有可能使用不同的数据源,而且由于配置管理的改进,每个
子系统的负责人员之间最好互不影响,最好每个子系统的人员都使用各自的配置文件,
公用的配置文件放到统一的位置,只需要在启动的时候把所有文件加载……,不过问题出
现了:
1、貌似<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
在所有文件中只允许有一个,这个好办,放到公用的文件里面去
2、spring由于每个子系统都会使用公用的连接池,但会映射不同的表,貌似spring的2个TransactionManager
检测到使用统一的数据源的话是不行的,会出错,这就要求把TransactionManager也放到公用配置文件里面去,
可是,如果这样的话,势必导致所有的人都可以修改公用配置文件,和配置管理的原则不符……,而且,这样子
的话每个子系统的hibernate.cfg.xml配置文件还是要各子系统自己维护,会产生多个,而一个
org.springframework.orm.hibernate3.LocalSessionFactoryBean,又貌似只支持一个hibernate配置文件
(spring 1.2.x)
还有虽然号称是使用EJB3的规范,但是还是使用的hibernate让自己心里有点别扭
这么多的貌似和自己的别扭,搞得挺烦的,不过听说最近出了JPA的规范,spring也支持,虽然还是spring2.0的m2,
拿来先用再说,呵呵</bean></bean></bean></bean></property> </bean></bean></bean></property> </bean></mapping></session-factory></hibernate-configuration>
发表评论
-
jasper report与Spring mvc整合
2015-10-19 16:02 1650配置jasper view resolver <be ... -
solr导入Oracle日期时间数据的处理
2013-02-08 10:01 5165参考文章: http://stackoverflow.com/ ... -
solr服务端加亮设置
2013-02-06 23:25 1321在${solr.home}/conf/solrconfig.x ... -
Solr客户端自定义开发
2013-02-06 16:52 1688@Service @Qualifier(" ... -
CAS 客户端获取Credentials额外信息
2013-02-06 09:40 4018服务端的配置 1、在deployerContext.xml中加 ... -
CAS自定义Credentials登录
2013-02-02 00:03 7993先看了这篇文章http://www.blogjava.net/ ... -
Spring data MongoDB DSL
2013-01-29 13:38 2614这两天自己配置了一个通过Spring Data来连接Mongo ... -
Spring MVC和freemarker配置
2013-01-21 13:45 2486参考文章:http://www.cnblogs.com/hoo ... -
我自己的maven环境
2013-01-17 14:37 1112今天把自己的maven环境记录下来,准备重装系统能找到 mav ... -
Spring-data jpa学习
2013-01-17 14:25 1821一个早上加一个中午就耗在这里了啊,就一个小问题,让我吐血不已, ... -
今天学会的DetachedCriteria用法
2013-01-12 22:01 10191以前用hibernate,一般都是使用hql语句的,因为和sq ... -
学习SSO-1 Tomcat启用ssl
2012-11-29 10:41 6995根据网上的http://www.kafeitu.me/sso/ ... -
Solr连接数据库
2012-04-10 09:40 6221要建立自己的全文检索 ... -
Solr试用小记
2012-04-10 09:15 15731、下载tomcat7、solr 3.5.0 以及IKAnal ... -
java生成二维码,qrcode
2012-03-22 15:41 7024通过barcode4j生成 @Controller @R ... -
使用HttpClient 4.1.2调用webservice
2012-01-19 14:22 19262下载httpclient,把压缩包里lib目录的所有jar放到 ... -
Spring MVC3 Hibernate3 Annotation 补充
2011-05-30 11:59 1411通过配置文件进行事务声明 app-config.xml & ... -
Spring MVC3 Hibernate3 Annotation
2011-05-30 11:56 1780web.xml <?xml version=&quo ... -
Tomcat Mod_jk负载均衡Session复制的几点补充
2010-02-24 16:49 1339tomcat和mod_jk进行负载均衡的时候,如果要实现Ses ... -
第一次实际应用Spring MVC
2009-11-17 08:37 1604要做一个简单的投票的东西,看spring mvc的文章已经很久 ...
相关推荐
1. **实体(Entity)**: 实体是与数据库表相对应的Java类。它们通常带有`@Entity`注解,表明这个类是一个JPA实体。例如: ```java @Entity public class User { @Id private Long id; private String name; // ...
**JPA(Java Persistence API)**是...总之,"JPA大全之经典全集"这个资源集合对于学习和掌握JPA有着重要的价值,无论是初学者还是经验丰富的开发者,都能从中受益,深入理解JPA的各个方面,提升自己的数据库编程能力。
Hibernate是最早的ORM框架之一,后来成为了JPA的一个实现。Hibernate JPA提供了JPA规范的全部功能,并且在JPA的基础上扩展了一些特性,如更强大的 Criteria 查询、HQL(Hibernate Query Language)等。Hibernate JPA...
1. **实体(Entities)**:表示数据库表的Java类,使用@Entity注解标记。实体类的属性对应于数据库表的列,使用@Column注解进行映射。 2. **实体管理器(EntityManager)**:作为持久化的主要入口点,负责实体的创建...
1. **实体管理器(EntityManager)**:这是JPA的核心接口,负责所有与实体类相关的操作,如持久化、删除、查找和事务管理。 2. **查询语言(JPQL)**:Java Persistence Query Language,一种类似于SQL的语言,用于...
1. JPA基本概念和工作原理的概述。 2. JPA的主要组件和接口的详细说明。 3. JPA注解的全面介绍,包括如何使用它们来定义实体类、字段属性以及关系映射。 4. Oracle数据库与JPA的集成,包括驱动配置、数据源设置等。 ...
在"JPA-1-HelloWorld"这个示例中,我们将看到如何使用Hibernate作为JPA的实现来完成一个简单的"Hello, World!"程序。 **JPA HelloWorld实现步骤** 1. **添加依赖**: 首先,你需要在项目中引入Hibernate和JPA的相关...
1. **实体(Entities)**: - `@Entity`:用于标识一个Java类为JPA实体。 - `@Table`:定义实体映射到的数据库表名。 - `@Id`:标识实体类中的主键字段。 - `@GeneratedValue`:指定主键生成策略,如自动序列或...
1. **Repository Abstraction**:这是 Spring Data JPA 的核心特性之一。它提供了一种声明式的数据访问接口,允许开发者定义自定义的查询方法,而不需要手动编写 SQL 或者 HQL(Hibernate Query Language)。例如,...
在IT领域,Spring框架是Java开发中的核心工具之一,它为构建企业级应用程序提供了全面的解决方案。Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过...
1. JPA(Java Persistence API)是Java EE标准的一部分,它定义了如何将Java对象映射存储到关系型数据库中。JPA提供了一套程序员API,用于读取、写入和查询持久化Java对象(称为“实体”Entity)。此外,JPA还包括一...
1. Repository:这是所有 Repository 接口的基类,不包含任何方法,主要用于定义通用的类型信息,使 Spring 能够在扫描时自动识别和配置。 2. CrudRepository:继承自 Repository,提供了基本的 CRUD 功能,如 save...
1. **实体(Entity)**: 在JPA中,实体是映射到数据库表的Java类。它们通过`@Entity`注解标识,并且通常有一个`@Id`注解的属性作为主键。 2. **实体管理器(EntityManager)**: 这是JPA的核心组件,负责创建、查询...
Hibernate之JPA注解
"JavaOne2009-JPA2映射的神秘之旅.pdf" 和 "JavaOne2009-JPA2新特征.pdf" 这两个文档,显然涵盖了JPA2的重要概念和新特性,特别是关于映射和框架的最新发展。以下是这两个主题的主要知识点: 1. **JPA2新特性**: ...
Spring Data JPA则是在JPA之上构建的一层抽象,它扩展了JPA的功能,提供了更多的便利。例如,Spring Data JPA支持自动化的查询生成,只需定义Repository接口,无需编写任何实现代码,就可以执行CRUD(创建、读取、...
1. **自动映射**:JPA能自动将Java对象映射到数据库表,减少了手动编写SQL的繁琐工作。 2. **事务管理**:JPA支持声明式事务管理,简化了事务处理。 3. **懒加载和即时加载**:通过懒加载机制,可以优化性能,仅在...
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。