java - CrudRepository 不删除行

标签 java spring spring-data-jpa spring-data

我创建了一个像这样的计划类

计划:

@Entity(name = "Plan")
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class PlanEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int planId;

    private String planName;

    private BigDecimal pBenefitMax;

    private LocalDate pStartDate;

    private LocalDate pEndDate;

    private int pCompanyId;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "dPlanId")
    private List<DentalAgreementEntity> dentalAgreementEntities;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "pPlanId")
    private List<PatientEntity> patientEntities;
}

患者实体如下所示:

@Entity(name = "Patient")
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class PatientEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int patientId;

    private String firstName;

    private String lastName;

    private String patientEmail;

    private String patientPhone;

    private LocalDateTime dateOfBirth;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "tPatientId")
    private List<TransactionEntity> transactionEntities;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "aPatientId")
    private List<AppointmentEntity> appointmentEntities;

    @ManyToOne
    @JoinColumn(name = "pPlanId")
    private PlanEntity planEntity;

}

协议(protocol)实体如下所示:

@Entity(name = "DentalAgreement")
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class DentalAgreementEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer agreementId;

    private BigDecimal percentage;

    private Integer dPlanId;

    private String dAdaCode;
}

PlanRepository 看起来像这样:

@Repository
public interface PlanRepository extends CrudRepository<PlanEntity, Integer> {
}

而且我能够轻松成功地保存计划实体。但是,如果我尝试删除 PlanEntity,如下所示:

public void deleteCompanyPlan(PlanEntity planEntity){
    planRepository.delete(planEntity);
}

虽然没有抛出错误,但当我检查数据库时,该行并未被删除。我尝试过使类可序列化,仅使用“deleteById()”方法和许多其他方法,但我无法通过 Spring 实现删除计划。我做错了什么?

最佳答案

通过从父实体中删除 FetchType.LAZY 和 CascadeType.All 已修复问题。

@Entity(name = "Company")
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper=false)
public class CompanyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int companyId;

    private String companyName;

    private String companyNumber;

    private String companyEmail;

    private String companyAddress;

    private String companyCity;

    private String companyState;

    private String companyZip;

    @OneToMany
    @JoinColumn(name = "pCompanyId")
    private List<PatientEntity> patientEntities;

    @OneToMany
    @JoinColumn(name = "pCompanyId")
    private List<PlanEntity> planEntities;

    @Override
    public String toString() {
        return "CompanyEntity{" +
                "companyId=" + companyId +
                ", companyName='" + companyName + '\'' +
                ", companyNumber='" + companyNumber + '\'' +
                ", companyEmail='" + companyEmail + '\'' +
                ", companyAddress='" + companyAddress + '\'' +
                ", companyCity='" + companyCity + '\'' +
                ", companyState='" + companyState + '\'' +
                ", companyZip='" + companyZip + '\'' +
                '}';
    }
}

关于java - CrudRepository 不删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56150031/

相关文章:

java - Spring Integration 解码变压器 Jaxb2Marshaller 性能问题

java - Spring 中使用 AOP @AfterReturning 出现意外的RollbackException

mysql - 如何处理 spring-boot hibernate 问题中的当前更新?还需要使应用程序可扩展

java - 在 IBM liberty 服务器中实现并发

maven - 使用 JRE 1.5,Maven 仍然表示 -source 1.3 中不支持注释

java - 仅在序列化期间使用@JsonIgnore,而不是反序列化

spring - Spring Data JPA 是 JPA 实现吗?

java - 如何在类和jvm中获取 Activity 对象?

java - spring-boot 应用程序 : ApplicationContextException: Unable to start EmbeddedWebApplicationContext

java - 在 Spring 中创建实体实例,无需任何 Spring 交互