`

Spring+jpa相关配置

    博客分类:
  • JPA
阅读更多
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd   
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<!-- 数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close" scope="singleton">
		<property name="driverClassName">
			<value>com.mysql.jdbc.Driver</value>
		</property>
		<property name="url">
			<value>jdbc:mysql://127.0.0.1:3306/test</value>
		</property>
		<property name="username">
			<value>root</value>
		</property>
		<property name="password">
			<value>123456</value>
		</property>
		<!-- 以下为可选参数 
		<property name="initialSize">
			<value>10</value>
		</property>-->
		<property name="minIdle">
			<value>10</value>
		</property>
		<property name="maxActive">
			<value>15</value>
		</property>
		<property name="maxIdle">
			<value>15</value>
		</property>
		<property name="validationQuery">
			<value>select count(*) from dual</value>
		</property>
		<property name="testOnBorrow">
			<value>true</value>
		</property>
		<property name="testOnReturn">
			<value>true</value>
		</property>
		<property name="testWhileIdle">
			<value>true</value>
		</property>
		<!--大于0 ,进行连接空闲时间判断,或为0,对空闲的连接不进行验证 -->
		<property name="minEvictableIdleTimeMillis">
			<value>60000</value>
		</property>
		<!--失效检查线程运行时间间隔,如果小于等于0,不会启动检查线程 -->
		<property name="timeBetweenEvictionRunsMillis">
			<value>300000</value>
		</property>
	</bean>

	<context:annotation-config />

    <!-- 配置实体管理对象 p:persistenceUnitManager-ref="persistenceUnitManager"-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
           >
        <property name="persistenceXmlLocation" value="classpath:/META-INF/persistence.xml" />
        <property name="dataSource" ref="dataSource" />
        <!-- 选配属性 -->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
                <property name="showSql" value="false"/>
                <property name="generateDdl" value="false"/>
                <property name="databasePlatform" value="org.apache.openjpa.jdbc.sql.MySQLDictionary"/>
            </bean>
        </property>
    </bean>

    <!--可屏蔽
    <bean id="persistenceUnitManager"
          class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"
          p:default-data-source-ref="dataSource"
          p:persistence-xml-locations="classpath*:META-INF/persistence.xml">
        <property name="loadTimeWeaver">
            <bean class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver"/>
        </property>
    </bean>    -->


    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" lazy-init="true">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

     <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="*"  rollback-for="Exception" />
			<!--<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
            <tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="someOtherBusinessMethod" propagation="REQUIRES_NEW" />
			<tx:method name="*" propagation="SUPPORTS" read-only="true" />-->
		</tx:attributes>
	</tx:advice>

	<aop:config>
		<aop:pointcut id="businessService" expression="execution(* service.*.*(..))" />
		<aop:advisor advice-ref="transactionAdvice" pointcut-ref="businessService" />
	</aop:config>


    <bean id="orderDao" class="dao.OrderDao">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <bean id="orderService" class="service.OrderService">
        <property name="orderDao" ref="orderDao"/>
    </bean>


           <context:load-time-weaver />
            <context:annotation-config />
</beans>

 

persistence.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">



	<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <properties>
        	<property name="openjpa.InverseManager" value="false"/>
			<property name="openjpa.Log" value="log4j"/>
			<property name="openjpa.DataCache" value="false"/>
			<property name="openjpa.QueryCache" value="false"/>
			<property name="openjpa.Compatibility" value="QuotedNumbersInQueries=true"/>
		</properties>
    </persistence-unit>



    <!--<persistence-unit name="MyJPA" transaction-type="RESOURCE_LOCAL">
	   &lt;!&ndash; 描述信息.(可选) &ndash;&gt;
   <description>MySQL5.1数据库的映射文件</description>
	&lt;!&ndash;
要注意的是我们使用的JPA事务采用RESOURCE_LOCAL(本地资源),
不能够使用JTA(全局资源,容器管理事务)。
而且使用本地资源的话,
只能够在web容器部署,而不能够部署到EJB容器里面(Glassfish等),
在GlassfishV2里面部署就提示只可以使用JTA事务
	&ndash;&gt;
		&lt;!&ndash; 定义jpa的Provider &ndash;&gt;
		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
		<class>entity.Animal</class>
&lt;!&ndash; J2EE中,不建议在此配置,建议在Spring中的entityManagerFactory处配制
		<properties>
			<property name="openjpa.Log" value="none" />
			<property name="openjpa.Log" value="SQL=TRACE" />
			<property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true,PrettyPrintLineLength=72" />
		</properties>
		&ndash;&gt;
		<exclude-unlisted-classes/>
	</persistence-unit>-->
</persistence>

 

 

Order.java

 

/** * one端 *  * 碰到many为末端的加载就是延迟加载,若one为末端则为立即加载,除了one-to-one。 *  * @author jiqinlin *  */
@SuppressWarnings({"ALL"})
@Entity(name="tb_order")
public class Order implements java.io.Serializable {
    @Id
	@Column(name="id")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name="name")
    private String name;

/*  one端
    @OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
    mappedBy="order": 指明Order类为双向关系维护端,负责外键的更新

     */
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order")
    private List<OrderItem> orderItemList;

 

OrderItem.java

 

/** * many端 *  *
          在one-to-many双向关联中,多的一方为关系维护端,关系维护端负责外键记录的更新  *
          关系被维护端是没有权力更新外键记录的 *  *
 *  */
@SuppressWarnings({"ALL"})
@Entity(name="tb_orderitem")
public class OrderItem implements java.io.Serializable {
    @Id
	@Column(name="id")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    //@Column(name="order_id")
   // private int orderId;

    @Column(name="name")
    private String name;

    // optional=true:可选,表示此对象可以没有,可以为null;false表示必须存在
    @ManyToOne(cascade = { CascadeType.REFRESH,CascadeType.PERSIST , CascadeType.MERGE }, optional = true)
    @JoinColumn(name = "order_id")
    private Order order;

 

Dao.java

 

public class OrderDao extends JpaDaoSupport {

     public void addOrder(final Object order){
         getJpaTemplate().persist(order);
         /* getJpaTemplate().execute(new JpaCallback() {
              public Object doInJpa(EntityManager entityManager) throws PersistenceException {
            	  entityManager.getTransaction().begin();

                  entityManager.persist(order);
                  entityManager.getTransaction().commit();
                  entityManager.close();   

                  return null;
              }
          });*/
     }

     public void updateOrder(final Object order){
         getJpaTemplate().merge(order);
     }

}

 

service

 

  public void addOrder(Object order) throws Exception {
         orderDao.addOrder(order);
         //throw new Exception();
     }

    public void updateOrder(Object order) throws Exception {
         orderDao.updateOrder(order);
         //throw new Exception();
     }

     public static void main(String[]args){
        List orderItems = new ArrayList();
        Order order = new Order();
        order.setName("name333");
       // order.setId(1);

        OrderItem orderItem = new OrderItem();
         orderItem.setOrder(order);
         //order.getId();
         orderItem.setName("nameNew");
        
       

        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:applicationContext-common.xml");
		OrderService orderService = (OrderService) ctx.getBean("orderService");
         try {
             //orderService.addOrder(order);
             orderService.updateOrder(orderItem);
         } catch (Exception e) {
             e.printStackTrace();
         }

 

 

 

 

 

分享到:
评论
2 楼 ysj570440569 2016-09-12  
Maven多模块spring + springMVC + JPA/MyBatis企业级应用项目基础架构
项目开源地址:https://github.com/Jay-Y/yServer
新人伪全栈准备为开源做贡献,求关注~~~
1 楼 闫立佳 2013-09-11  
Could not open JPA EntityManager for transaction;执行例子代码会报这个错,这是什么原因啊?

相关推荐

    spring+springmvc+jpa零配置注解开发

    在“spring+springmvc+jpa零配置注解开发”项目中,我们将深入探讨如何利用注解驱动的配置,避免XML配置,实现更简洁、高效的开发流程。 首先,让我们关注“零配置”这个概念。在传统的Spring应用中,开发者需要在...

    Spring+Jersey+JPA+Hibernate+MySQL整合

    Spring框架以其IoC(控制反转)和AOP(面向切面编程)特性闻名,使得开发者可以更专注于业务逻辑,而不是基础设施的配置。在本项目中,Spring被用来整合其他技术,如Jersey、JPA和Hibernate,以实现一个完整的Web...

    spring+jpa的applicationContext.xml配置

    spring+jpa的applicationContext.xml配置

    基于_Struts_2+Spring+JPA_框架的WEB_应用

    **基于Struts 2 + Spring + JPA框架的WEB应用详解** 在现代的Java Web开发中,使用MVC(Model-View-Controller)设计模式已经成为主流。Struts 2、Spring和Java Persistence API (JPA) 是三个强大的开源框架,它们...

    Spring + JPA + Hibernate配置

    标题“Spring + JPA + Hibernate配置”涉及到的是Java开发中常用的三个框架——Spring、Java Persistence API (JPA) 和Hibernate的集成与配置。这是一份关于如何将这些框架结合使用的教程或参考资料,可能包含了实现...

    Spring+Struts2+JPA

    **Spring+Struts2+JPA 整合详解** 在Java Web开发中,Spring、Struts2和JPA是三个非常重要的框架。Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Struts2是一个强大的MVC框架...

    Struts+spring+JPA例子

    然后,导入压缩包中的"ssjexample"项目,该项目应该包含了Struts2、Spring和JPA的配置文件、实体类、DAO层、Service层以及Action层的代码。 在编码时,由于项目使用GBK编码,所以如果遇到乱码问题,你需要在Eclipse...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    总结来说,本项目是一个基础的Web开发框架,结合了SpringMVC的MVC设计模式、Spring Data JPA的数据访问层、Hibernate的ORM能力以及FreeMarker的模板引擎,同时还实现了环境配置的灵活切换,为开发高效、可维护的Web...

    myfaces+ajax4jsf+spring+jpa+chartCreate 配置备忘.part1

    myfaces+ajax4jsf+spring+jpa+chartCreate 配置备忘 完整eclipse项目源代码

    spring+springMVC+jpa+hibernate框架整合

    在JPA配置中,我们需要定义实体类,这些类代表数据库中的表,并使用注解来描述它们与数据库的映射关系。Hibernate作为JPA实现,它的配置通常涉及数据库连接信息、方言选择等。一旦配置完成,我们可以通过JPA的...

    SpringMVC+Spring+JPA+Maven框架搭建

    - applicationContext.xml:配置Spring的JPA管理器和事务管理,声明JPA扫描目录。 - dispatcherContext-servlet.xml:SpringMVC配置文件,声明视图解析器等信息。 - Log4j.properties:Log4j日志记录配置文件,...

    基于SpringBoot2+Jpa+SpringSecurity+redis+Vue的前后端分离系统

    用户管理 提供用户的相关配置 角色管理 角色菜单分配权限 权限管理 权限细化到接口 菜单管理 已实现动态路由,后端可配置化 系统日志 记录用户访问监控异常信息 系统缓存管理 将redis的操作可视化,提供对redis的...

    spring注解+spring data jpa文档+JPA文档.rar

    Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...

    jsf+spring+jpa

    4. **配置JSF/Spring/JPA整合**: - 在JSF的`faces-config.xml`文件中配置variable-resolver。 - 在Spring中集成JPA,配置LocalEntityManagerFactoryBean。 #### 六、最佳实践 - **模块化**:确保应用程序的各个...

    Struts+Spring+Jpa(hibernate)整合

    在进行整合时,开发者需要配置Struts2的配置文件struts.xml,Spring的配置文件applicationContext.xml,以及JPA的配置文件persistence.xml。同时,还需要确保所有依赖库正确导入,以避免类加载冲突。通过这样的整合...

    Struct + spring + jpa

    【Struct + Spring + JPA】是企业级应用开发中常用的技术栈组合,分别代表了三个重要的组件:Struts(一个MVC框架),Spring(一个全面的企业级应用框架),以及JPA(Java Persistence API,Java持久化API)。...

    各种数据源配置之Spring+JPA配置BoneCP数据源

    总结起来,配置Spring+JPA与BoneCP数据源涉及的关键知识点包括:Spring框架、JPA、BoneCP连接池、数据库驱动、依赖管理、Spring配置、实体类、Repository接口以及Spring Boot的启动配置。理解并熟练掌握这些知识点,...

    SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证

    6. **security-jpa**:此文件名可能是某个模块或者配置文件,可能包含了与SpringSecurity和JPA整合的具体实现,比如用户Repository、安全配置类等。在项目中,它可能负责定义如何使用JPA来操作用户角色和权限数据,...

    spring struct + jpa

    3. **实体管理工厂(EntityManagerFactory)**:创建EntityManager实例,是JPA的配置中心。 4. **查询语言(JPQL)**:类似于SQL,用于查询和操作实体。 **Spring Structs + JPA整合** 将Spring Structs与JPA结合...

Global site tag (gtag.js) - Google Analytics