当前位置: 首页 > 知识库问答 >
问题:

删除spring JPA中的实体

方祺
2023-03-14

有两个实体具有关系@ManyToOne和@OneTomany(类别和产品)。当我启用(cascade=cascadeType.all)时,Products中的一条记录会删除一个类别,这是不好的。该实体的结果是只有删除发生在一个地方(表)而没有级联(相关)删除为另一个引用必须做什么???我使用的是spring 5.1.5(不是spring boot)谢谢!

spring 5/TOMCAT 9/jackson-DataBind/spring-Data-JPA 2.1.5/persistence-api 1.0.2/Hibernate-core 5.4.1

@Entity公共类类别{

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="CAT_ID")
private Long id;

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

@JsonManagedReference
@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name="CAT_ID")
@OrderBy
private Set<Product> products = new HashSet<>();

public Long getId() {
    return id;
}

@Entity公共类产品{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="PRODUCT_ID")
    private Long id;

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

    @JsonBackReference
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="CAT_ID")
    private Category category;

    public Long getId() {
        return id;
    }

@RequestMapping(value=“/categories/{categoryId}/products/{productId}”,method=RequestMethod.delete)公共ResponseEntity deleteById(@PathVariable长categoryId,@PathVariable长productId){ProductService.DeleteProductById(productId);返回新的ResponseEntity<>(HttpStatus.OK);}

@Transactional
@Override
public void deleteProductById(Long productId) {
    // TODO Auto-generated method stub
    productRepository.deleteById(productId);

}

共有1个答案

阴培
2023-03-14

解决了,我不知道为什么,但在crudRepository方法中,deleteById(productId)仅与CascadeType.all一起工作,并且您删除请求/categories/{catId}/products/{productId}中的所有(产品和类别记录),这是错误的。我是刚删除(产品产品)和这个删除产品。在{id}的情况下,只需按id请求项目并获得它,然后删除。

 类似资料:
  • 我在删除联接表中引用的实体时遇到问题。以下是三个链接的enitie。 当我尝试使用CrudRepository从来宾表中删除来宾时,它会给我这个错误。 错误:表“guest”上的更新或删除违反了表“guest\u group\u join”上的外键约束“FKKOUGVMCU860MOUACR1SHJXY”。键(id)=(4)仍然从表“guest\u group\u join”中引用。 有人能帮忙吗

  • 删除父实体时,我还想删除关联的子实体(从数据库中)。我试图在删除时使用级联,如下所示,但我一定做错了什么。 当对父实体对象调用删除时,我收到错误消息:“该实体仍在数据库的其他地方引用”。我可以确认该实体在数据库的其他地方引用的唯一地方是在下面的两个表中(如果我手动从数据库中删除子行,对父实体对象的删除调用工作正常)。在过去的9个小时里,我一直在阅读实体对象并尝试不同的东西。我做错了什么? 这是我的

  • 主要内容:JPA实体删除示例要从数据库中删除记录,可以使用接口提供方法。方法使用主键来删除特定的记录。 JPA实体删除示例 在这里,我们将演示如何根据主键删除指定学生的信息。 完整的项目代码如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,它包含属性:,和。 文件:StudentEntity.java 的代码如下 - 第2步: 将实体类和其他数据库配置映射到文件中。 文件:persistence.

  • 我在删除子实体项目时遇到问题。每次我删除它的时候,什么都没有发生,父节点和子节点之间的关联仍然存在。我在网上搜索过,有些人建议使用orphanremoval,但我试过了,没有用。如果任何人可以建议,不胜感激。我的代码如下: 资产实体 (CHILD) 是单向关系,因此资产实体不包含任何@ManyToOne 在我的 SQL 数据库表中,我的关系CLIENTPROFILE_CLIENTASSET,它们通

  • 我的实体。ValidationStep与documentDetail有一对一的关系,documentDetail与documentValidations有一个完全的关系 我的删除查询 父ValidationStep被删除,但是docDetail和documentValidations仍然在数据库中。

  • 你好,我在删除实体时遇到了问题。entitymanager不会删除实体。有人看到代码中的错误吗? 错误消息: java.lang.Assertionerror: 预期 :null 实际 :帐户{id=1, 客户=客户 id=1, 名字=“金”, 姓氏=“佩德森”, email='kim@yahoo.no“, 电话号码=”90045870“, 出生=1980-11-05 00:00:00.0}, 登