前提:
1.使用LocalContainerEntityManagerFactoryBean
2.可能存在多个persistence.xml,比如5个以上,每个persistence.xml定义的class不同
想一下就能切换好实现:
entityManagerFactory的定义放在一个文件就叫ormContext.xml吧,包含下面内容
配置一:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitManager" ref="persistenceUnitManager"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.RedSoftJpaVendorAdapter">
</bean>
</property>
</bean>
<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>classpath*:/redsoft_jpa_persistence.xml</value>
</list>
</property>
</bean>
使用ormContext.xml的配置文件如下:
<import resource="classpath*:/ormContext.xml"/>
<bean id="entityClasses" class="com.abest.util.PersistenceClassesConfigProcessor">
<property name="entityClassNames">
<list>
<value>com.abest.common.dao.TestBean</value>
<value>com.abest.uwin.baseinfo.domain.Region</value>
<value>com.abest.uwin.baseinfo.domain.Brand</value>
<value>com.abest.uwin.baseinfo.domain.MeasureUnit</value>
<value>com.abest.uwin.baseinfo.domain.ProductionFactory</value>
<value>com.abest.uwin.baseinfo.domain.MaterialType</value>
</list>
</property>
</bean>
PersistenceClassesConfigProcessor的实现:
public class PersistenceClassesConfigProcessor extends InstantiationAwareBeanPostProcessorAdapter {
private static final String PERSISTENCE_UNIT_MANAGER = "persistenceUnitManager";
String beanNameOfpersistenceUnitManager = PERSISTENCE_UNIT_MANAGER;
private String[] entityClassNames;
public PersistenceClassesConfigProcessor() {
}
public Object postProcessAfterInitialization(Object object, String beanName) throws BeansException {
if(beanName.equals(beanNameOfpersistenceUnitManager)
&& object instanceof PersistenceUnitManager)
{
PersistenceUnitManager unitManager = (PersistenceUnitManager) object;
PersistenceUnitInfo unitInfo = unitManager.obtainDefaultPersistenceUnitInfo();
for (String entityClassName : entityClassNames) {
unitInfo.getManagedClassNames().add(entityClassName);
}
}
return object;
}
public void setEntityClassNames(String[] entityClassNames) {
this.entityClassNames = entityClassNames;
}
public void setBeanNameOfpersistenceUnitManager(String beanNameOfpersistenceUnitManager) {
this.beanNameOfpersistenceUnitManager = beanNameOfpersistenceUnitManager;
}
}
persistence.xml就不需要再指定class了,而可以只修改配置一一处地方来切换jpa的实现。
朋友问我为什么不在一个persistence.xml定义所有需要持久化的类呢?我想想我的确有点没事找事干了.
分享到:
- 2007-02-28 18:58
- 浏览 9627
- 评论(2)
- 论坛回复 / 浏览 (2 / 7425)
- 查看更多
相关推荐
16. EJB3.0 中 Entity Bean 的组成可以包括 Primary key class、Local home interface、Local interface、ejb-jar.xml 和 Bean class。 17. Session Bean 按是否跟踪客户状态分为 Stateless Session Bean 和 ...
为了使用JPA,需要在项目的`src/main/resources/META-INF`目录下创建`persistence.xml`文件,该文件定义了持久性单元(Persistence Unit)的基本配置。 ```xml <persistence xmlns=...
在Spring出现之前,企业级Java应用通常使用EJB框架进行开发。然而,EJB框架存在以下不足: - **EJB过于臃肿**:特别是Entity EJB无法脱离容器运行。 - **企业级服务难以使用**:例如事务管理、安全性等功能不够直观...
* 简单易用,集成方便:JPA 提供了简洁的 API,易于使用和集成。 * 强大的查询能力:JPA 提供了强大的查询能力,支持复杂的查询操作。 * 支持面向对象的高级特征:JPA 支持面向对象的高级特征,例如继承、多态等。 ...
- `ejb3-persistence.jar` - `hibernate-annotations.jar` - `hibernate-commons-annotations.jar` - `hibernate-entitymanager.jar` - `hibernate-validator.jar` - `hibernate3.jar` - `jaas.jar` - `javassist....
- 引入`hibernate-annotations-3.4.0.GA.zip`中的`hibernate-annotations.jar`、`hibernate-commons-annotations.jar`和`ejb3-persistence.jar`。 3. **实体类开发**:以下是一个简单的实体类User示例代码: ```...
由于其良好的兼容性和开放性,JPA得到了Spring、EJB3.0等开发团队的支持,这也预示着在未来几年内,JPA有望成为ORM领域内的主导标准之一。 #### 二、JPA的核心技术 JPA的核心技术主要包括三个方面: 1. **ORM映射...
1. 添加Spring的相关库:`spring.jar` 和 `struts2-spring-plugin-2.1.6.jar`,以实现Struts2与Spring的集成。 2. 使用IDE(如MyEclipse)创建Spring配置文件`applicationContext.xml`。你可以通过右击项目 -> ...
在EJB 3中,这些注解主要定义在`javax.persistence.*`包中,与JDK 5.0兼容,因此大多数现代IDE如Eclipse、IntelliJ IDEA和Netbeans都支持注解的自动补全功能。 **实体Bean声明**: 使用`@Entity`注解标记一个类为...
3. 配置部署描述符ejb-jar.xml(通常是自动完成的,但在某些情况下需要手动配置): ```xml <ejb-jar xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.2"> <ejb-name>MySessionBean</ejb-name> ...
在开始学习如何将Spring与JPA结合使用之前,我们需要做一些准备工作。这些准备主要包括: 1. **环境搭建**:确保安装了Java环境,同时还需要安装IDE(如Eclipse)、数据库系统(如DB2 Express-C)等。 2. **...
3. **简单易用,集成方便**:JPA的设计旨在提供更为简单的编程模型,使用`javax.persistence.Entity`注解来标识实体类即可完成大部分配置工作,且易于与其他框架或容器集成。 4. **可媲美JDBC的查询能力**:JPA...
1. **配置`persistence.xml`文件**:该文件通常位于项目的`META-INF`目录下,用于指定持久化单元的信息,如使用的ORM产品、实体类路径等。 2. **创建实体类**:使用JPA注解(如`@Entity`、`@Table`等)来描述实体类...
- `ejb3-persistence.jar`: EJB3持久化支持。 - `hibernate-annotations.jar`: Hibernate注解支持。 - `hibernate-commons-annotations.jar`: Hibernate通用注解支持。 - `hibernate-entitymanager.jar`: Hibernate...
本文旨在介绍如何在Spring框架中集成使用iBATIS数据库层。数据库编程涉及到数据库连接、连接池管理、SQL语句执行、输入输出处理以及事务管理等多个方面。Java的JDBC API尽管功能强大,但在实际应用中显得较为底层且...
在EJB项目中,XDoclet可以生成ejb-jar.xml、sun-ejb-jar.xml、home接口、remote接口以及实体Bean的ejb-class.java等文件。开发者只需要在源代码中添加适当的注释,XDoclet就会自动处理这些细节。 ### Hibernate ...
<provider>org.hibernate.ejb.HibernatePersistence <class>footmark.springdata.jpa.domain.UserInfo</class> <class>footmark.springdata.jpa.domain.AccountInfo</class> <property name="hibernate....
【EJB 简介】 EJB,全称 Enterprise JavaBeans,是由Sun...然而,现代框架如Spring的出现,也给开发者提供了更多选择,EJB在某些场景下可能不再是首选,但其设计理念和技术积累仍对Java企业应用的发展产生了深远影响。