`
arron.huang
  • 浏览: 32673 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java JPA 操作数据,事物控制不完整 clear(),merge()方法分析

 
阅读更多

最近在使用框架 spring+jpa+cxf 部署一个服务,出现的问题!

 

事务部分:

 

在Service的一个方法中,定义好了事务完整性控制

如:

Dao:

 

public class UserDao{

    @PersistenceContext
    private EntityManager em;

 

    public User saveOrUpdate(User u){

         //code

        return em.merge(u);

    }

 

    public boolean updateUserBySql(String jpa){

         try{

           em.createQuery(sql).executeUpdate();

           return true;

         }catch(Exception e){

             return false;

        }

    }

 

}

 

public class UserServiceImpl{

@Autowired

private UserDao userDao;

@Autowired

private TransactionService tranService;

 

//中间进行缓存基本配置信息的获取(每隔半小时加载一次配置表里面信息)

@Autowired

private CommonService commonService;

 

public Aresp updateUserTradeOrders(Areq req){

     TransactionStatus status = tranService.getTransactionStatus();

    try{

       User u = XXXX(req);  //把req对象变成需要的user对象

      String jpa = “update user sql”; //把该用户所有的状态为有效变成无效Sql

      boolean bool = userDao.updateUserBySql(jpa);

  

     if(bool){

         userDao.saveOrUpdate(u)

     }

    Aresp a = Aresp.createSuccess();

    a.setDesc(commonService.getSysconfig(a.getCode));

    transService.commit(status);

    return a;

}catch(Exception e){

e.pr;

    transService.rollback(status);

   return Aresp.createFaild();

}

}

}

 

CommonService 中方法是每隔半小时进行一个refluse,在refluse时候,会对em进行clear()调用,

 

提供方法的接口,测试都没有问题! 后来测试时候突然发现半小时一次的,会更新掉用户信息为无效,但是没有把新增的实体保存,出现疑问:

1.虽然我代码不合理,理论应该是先commit在去获取描述语,但是我clear()调用后,也不存在以前有效状态被修改为无效

2. clear()为什么不能把所有的都清楚,都不变动我的数据,执行一半破坏事务的完整性,我使用事务控制的初衷

 

查看jpa的clear()方式使用和实践:clear()方法分离所有当前正在被管理的实体

em.clear()把实体管理器中所有的实体对象编程游离状态

 merge是把实体与数据库同步

通过两点分析,如果。先merge一个不存在库中数据,然后clear 在commit的对象是不会保存到库中,如果库中一开始就存在这条记录的时候,commit后,会被更新

 

分享到:
评论

相关推荐

    java JPA 批注参考

    批注是元数据的一种形式,它们直接嵌入到Java源代码中,并在运行时由JPA提供程序解析以执行相应的操作。 1. **实体批注**: - `@Entity`:标记一个Java类为JPA实体,意味着这个类的实例可以被持久化到数据库中。 ...

    java jpa的驱动类包

    Java Persistence API(JPA)是Java开发人员用来管理和持久化应用程序数据的一种标准API。它为对象-关系映射(ORM)提供了一种简洁且强大的框架,使得开发者可以使用面向对象的方式来处理数据库操作,而无需过多关注...

    jpa.rar_Java JPA

    JPA通过提供一套标准接口和API,简化了在Java应用中存储、查询和管理数据的过程,使得开发者可以更加专注于业务逻辑,而不是底层的数据库操作。 一、JPA基本概念 1. 实体(Entity):在JPA中,实体代表数据库中的表...

    java JPA 用法

    ### Java JPA 用法详解 #### 一、JPA 概述 JPA (Java Persistence API) 是Java EE 5.0平台标准中的ORM(对象关系映射)规范,旨在简化现有的Java EE和Java SE应用程序的对象持久化开发工作。JPA通过JDK 5.0注解或...

    spring jpa操作数据库 级联数据 hibernate

    在IT行业中,数据库操作是应用程序的核心部分,Spring JPA(Java Persistence API)是Spring框架提供的一种简化ORM(对象关系映射)操作的方式。本主题主要围绕"spring jpa操作数据库 级联数据 hibernate"展开,探讨...

    SpringBoot操作多数据源(JPA+JdbcTemplate)

    在Spring Boot应用中,我们经常遇到需要连接和操作多个数据库的情况。这个场景通常出现在大型系统中,例如,可能有一个...在实际项目中,根据需求选择合适的方式操作数据源,可以极大地提升开发效率和系统的可维护性。

    java-jpa 连接mysql新增、修改例子

    Java JPA(Java Persistence API)是Java平台上...通过以上步骤,我们就完成了使用Java JPA连接MySQL数据库进行数据操作的示例。这个过程展示了如何利用JPA的便捷性进行增删改查操作,同时保持代码的简洁性和可扩展性。

    springboot + jpa 批量存储示例

    在本文中,我们将深入探讨如何使用Spring Boot与Java Persistence API (JPA) 实现批量存储操作。Spring Boot简化了设置和配置,而JPA作为Java的ORM(对象关系映射)框架,允许开发者以面向对象的方式操作数据库。...

    Java JPA 学习资料 合集

    JPA 规范部分详细的介绍了 JPA 中实体 Bean 的定义,并介绍了实体 Bean 支持的注释、全新的查询语言、实体管理接口、容器实现规范等内容。 JPA 标准制定过程中充分吸收了目前已经出现的所有持久化技术的所有优点,...

    Spring Boot+Jpa多数据源配置Demo(支持不同数据库)

    Spring Boot结合JPA(Java Persistence API)和JdbcTemplate,为开发者提供了灵活且强大的多数据源配置能力。本示例将详细介绍如何在Spring Boot项目中实现这样的配置,以支持不同类型的数据库。 首先,我们要理解...

    jpa操作mysql数据库

    **JPA(Java Persistence API)** 是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种面向对象的方式来处理数据库操作,使得开发者可以使用Java对象而不是SQL语句进行数据库交互。JPA通过ORM...

    事物JPA入门

    **事物(Transaction)JPA 入门** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它提供了一种面向对象的方式来处理数据库操作,使得开发人员可以避免直接编写SQL,...

    如何控制JPA的事务

    对于“R”查询,只是查询数据,没有对数据产生变化,所以并不需要控制事务。 JPA的事务管理可以通过配置文件(persistence.xml)中的“transaction-type”元素来指定事务类型。如果使用JTA管理事务,则配置代码如下...

    JPA (Java Persistence API)

    它为Java开发者提供了一种规范化的机制来映射Java对象到关系数据库,使得在数据库操作中可以使用面向对象的方式来处理数据。JPA通过ORM(对象关系映射)技术实现了这一目标,它简化了数据库操作,减少了与SQL的直接...

    JPA 批注参考Java JPA

    JPA允许开发者以声明式的方式定义Java对象如何被持久化到关系数据库中,从而使得开发人员可以在Java EE 5应用服务器内部或Java Standard Edition(Java SE)5应用程序中以标准化和可移植的方式操作数据。 在JPA之前...

    使用springboot + JPA / MyBatis 实现多数据源动态切换

    2. **JPA(Java Persistence API)**:JPA是Java EE规范的一部分,用于管理关系数据库的对象-关系映射(ORM)。它提供了一种标准API,开发者可以使用注解或XML定义实体类与数据库表之间的映射。 3. **Spring Data ...

    JPA读写数据库java代码

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据。它为Java开发者提供了一种对象关系映射(ORM)工具,将数据库操作转换为对Java对象的操作,使得开发者可以使用面向对象的方式...

    jpa实现数据库操作

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种面向对象的方式来处理数据库操作,使得开发人员可以使用Java对象来操作数据库,而无需直接编写SQL语句。JPA的主要...

    springboot+mysql+jpa多数据源操作源码

    在Spring Boot应用中,使用Spring Data JPA与MySQL数据库进行多数据源操作是一项常见的需求,尤其是在构建分布式系统或需要处理多个数据库的应用中。本项目"springboot+mysql+jpa多数据源操作源码"旨在提供一个示例...

Global site tag (gtag.js) - Google Analytics