hibernate - 使用 Spring Data JPA 删除 SpringBoot 2.0.5.RELEASE 应用程序中的对象

标签 hibernate spring-mvc spring-boot spring-data-jpa spring-data

我有一个基本的 SpringBoot 2.0.5.RELEASE 应用程序。使用Spring Initializer、JPA、嵌入式Tomcat、Thymeleaf模板引擎,并打包为可执行JAR文件。

我有这门课:

public class User implements Serializable {

    @OneToMany( cascade = CascadeType.ALL,orphanRemoval = true, 
                fetch = FetchType.EAGER,mappedBy = "user")
    @JsonIgnore
    private List<Wallet> wallets = new ArrayList<Wallet>();

..
}

还有这个:

public class Wallet implements Serializable {

@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "invoice_id")
    @JsonIgnore
    @NotNull
    private Invoice invoice;



    @OneToMany(mappedBy = "wallet", 
               cascade = CascadeType.ALL, 
               orphanRemoval = true, fetch = FetchType.LAZY)
    @JsonIgnore
    private Set<Purchase> purchases = new HashSet<>();


    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id" , nullable=false)
    @JsonIgnore
    private User user;

..
}

还有另一个:

public class Purchase implements Serializable {

        @ManyToOne(fetch = FetchType.EAGER)
            @JoinColumn(name = "wallet_id")
            @JsonIgnore
            Wallet wallet;

        ...

    }

但是我从 Controller 中删除了一个钱包,该钱包有发票和购买并且属于用户,该钱包未从数据库中删除

walletService.delete(walletService.findById(id).get());

这是服务方法:

@Transactional
    public void delete(Wallet wallet) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("deleting Wallet [ " + wallet + " ]");
        }


        wallet
            .getPurchases()
            .parallelStream()
            .forEach(p -> purchaseService.delete(p));

        walletRepository.delete(wallet);

    }

 @Transactional
     public void delete (Purchase purchase ) {
         purchaseRepository.delete (purchase);
     }

在属性文件中:

spring.jpa.show-sql=true

我在控制台中看到的最后一个查询是这个:

select
    purchases0_.wallet_id as wallet_i8_13_0_,
    purchases0_.id as id1_13_0_,
    purchases0_.id as id1_13_1_,
    purchases0_.amount as amount2_13_1_,
    purchases0_.wallet_id as wallet_i8_13_1_ 
from
    t_purchase purchases0_ 
where
    purchases0_.wallet_id=?

没有删除,没有异常(exception)! !

最佳答案

在 Controller 中尝试这个:

    user.getWallets().remove(wallet);
    walletService.delete(wallet);       
    userService.save(user);

关于hibernate - 使用 Spring Data JPA 删除 SpringBoot 2.0.5.RELEASE 应用程序中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454641/

相关文章:

apache - Apache 背后的 Tomcat 使用 ajp 进行 Spring Boot 应用程序

java - 从 Spring RestController 服务到 Html

spring - 如何使用 Kotlin 在 Spring Boot 中处理自定义注解?

spring - org.hibernate.gradle.tools用户和密码在数据库部分不起作用

hibernate - 多对多关系jpa中的补充属性

java - 关于使用 DAO/Spring MVC/Hibernate 的建议

java - 提交时表单给出 Null

java - 检查列表中是否包含整数值时如何处理 HQL 查询中的空值

java - IntelliJ、Hibernate/JPA 和 Gradle 在构建任务中找不到依赖项

java - Spring 安全+休息不起作用