`
天空趋虚
  • 浏览: 11606 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

JPA删除实体类不能成功的原因

    博客分类:
  • Java
阅读更多

今天遇到一个郁闷的事,当我调用JPA  entityManager.remove(entity);用来删除一个购物车项的数据时,

发现SQL语句代码并没有执行,而remove其他实体类的时候却能成功。

我仔细观察了,终于发现原因。

这归根结底还是JPA entity生命周期的状态导致的,简称实体状态。

由于我的购物车对象关系 Cart ,CartItem为一对多的关系,我在删除CartItem时,Cart已经查询出来(未查询不在此列),当

我删除CartItem时,JPA将CartItem设置为删除状态,但是Cart也持有CartItem,并且Cart里的CartItem为持久状态,所以导致CartItem不能删除掉。

解决的办法就是:

将Cart里的CartItem也设置为删除状态。

//删除生成订单的购物车项
for (CartItem item : cart.getCartItems()) {
    cartAll.getCartItems().remove(item);
    cartItemDao.remove(item);
}
cartDao.merge(cartAll);

 此结论为个人看法,如果有不同看法可以回复,欢迎纠正。

 

 

 

 

0
0
分享到:
评论

相关推荐

    JPA开发流程课件以及注意事项

    Sun推出JPA的主要原因是简化Java应用的持久化开发工作,同时希望统一ORM技术,减少不同框架间的不兼容性。 JPA的核心组件包括`EntityManager`和`EntityManagerFactory`。`EntityManager`是与实体对象交互的主要接口...

    使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统.zip

    - **实体类**:创建对应的 JPA 实体类,如 User、Role、Permission 等,定义它们的属性和关系。 - **迁移工具**:使用 Liquibase 或 Flyway 进行数据库版本管理,自动化数据库表结构的创建和更新。 5. **RESTful ...

    JPA环境支持(JAP的环境配置)

    - **原因**:可能是实体类中的属性类型与数据库中对应字段的类型不匹配。 - **解决**:检查实体类属性类型与数据库字段类型是否一致。 ##### 2. 数据库连接失败 - **原因**:可能是 JDBC 驱动未正确配置或数据库...

    java.lang.NoClassDefFoundError: javax/persistence/EntityListener

    这个错误通常出现在应用已经成功编译,但在运行时因为某些原因无法找到或加载所需的类。在本例中,具体的错误信息是“javax/persistence/EntityListener”,这表明问题与Java持久化API(JPA)中的实体监听器有关。 ...

    springboot114基于多维分类的知识管理系统.zip

    3. **实体类定义**:根据数据库设计,定义对应的Java实体类,使用Lombok注解简化代码,如`@Entity`表示数据库中的表,`@Id`表示主键,`@ManyToOne`和`@JoinColumn`表示多对一的关联关系。 4. **Repository接口**:...

    Spring Boot添删改查

    然后,创建实体类(Entity),这将映射到数据库中的表。例如,一个名为`User`的实体类: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence....

    SpringBoot项目开发配置-以苍穹外卖为例

    通过定义实体类和使用JPA注解(如@Entity、@Table、@Id等),我们可以轻松地实现ORM(对象关系映射)。 对于用户认证和授权,Spring Security可以提供强大的支持。我们可以配置OAuth2或者JWT(JSON Web Tokens)...

    开箱即用的代码生成器(增删改查)

    在IT行业中,开发效率是衡量一个项目成功与否的关键因素之一。"开箱即用的代码生成器(增删改查)"是一种高效的工具,它能够帮助开发者快速构建基于SpringBoot的应用程序,尤其是涉及到基本的数据操作功能时,如增加、...

    springboot-商品管理

    通过实体类映射数据库表,使用Repository接口实现CRUD(创建、读取、更新、删除)操作。 **8. 安全性** 尽管系统没有提供商品删除功能,但在实际应用中,安全性仍然是重要考虑因素。可以使用Spring Security进行...

    SSH2做的登录有验证码 然后一个模块的增删改查 使用mysql数据库

    例如,你可以创建一个用户实体类,然后通过JPA的注解来定义其与数据库表的对应关系,进而实现对用户数据的CRUD操作。对于初学者来说,理解ORM的工作原理和如何在SSH2项目中使用它是学习的重要部分。 MySQL是广泛...

    hiberante基础介绍

    在项目中配置 Hibernate,包括数据库连接信息、实体类的映射文件(通常为 XML 或注解形式),然后就可以通过 Hibernate 提供的 Session 接口进行数据操作,如 CRUD(创建、读取、更新、删除)操作。 总之,...

    基于springboot电影院管理系统源码.zip

    开发者可以使用注解的方式定义实体类,通过Repository接口进行CRUD操作,无需编写大量的SQL语句。 此外,系统可能使用MyBatis或Hibernate作为数据访问层的另一种选择,它们提供了更灵活的SQL操作。MyBatis允许...

    springboot104学生网上请假系统设计与实现.zip

    我们可以创建请假实体类,使用Spring Data JPA进行数据持久化操作,存储到数据库中。 3. 审批模块:管理员查看并审批请假申请。这涉及到通知机制,如邮件或短信提醒,可利用Spring Integration进行消息传递。 4. ...

    java面试宝典

    `String`实际上是一个类,属于引用类型,它不可变,即一旦创建,其内容不能更改。为了处理可变字符串,可以使用`StringBuilder`或`StringBuffer`类。 #### 三、`int`与`Integer`的区别 `int`是Java的基本数据类型...

    hibernate学习

    Hibernate可以作为Java Persistence API(JPA)的实现,通过注解方式配置实体类和持久化逻辑。 **最佳实践** 使用Hibernate时,建议遵循一些最佳实践,如合理设计对象模型,优化查询,避免N+1查询问题,以及正确...

    Java面试题及答案(基础题122道)

    - `String`类在Java中是一个不可变类,意味着创建后不能更改其内容,适用于不需要修改的字符串。 - `StringBuffer`则是一个可变字符串类,支持在字符串末尾追加或插入新字符,适合于需要频繁修改字符串内容的情况。 ...

    (免费分享)springboot蓝天幼儿园管理系统-042

    基于springboot的幼儿园管理系统"的文件中获取源代码,包括实体类、服务接口、控制器、配置文件等。通过阅读和理解这些代码,开发者可以深入学习Spring Boot在实际项目中的应用,进一步提升自己的技能。 总的来说,...

Global site tag (gtag.js) - Google Analytics