Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过在JPA中设置条目的状态来删除DB中的条目_Java_Hibernate_Jpa - Fatal编程技术网

Java 通过在JPA中设置条目的状态来删除DB中的条目

Java 通过在JPA中设置条目的状态来删除DB中的条目,java,hibernate,jpa,Java,Hibernate,Jpa,我的团队决定不从数据库中删除条目,而是给它们一个状态,如ACTIVE或DELETED 当我收集其他实体时,问题就出现了,我们称之为Customer: @Entity public class Customer { @ManyToMany private List<Order> orders; private MyEnumStatus status; ... } 我的问题是-是否可以将状态字段(订单实体)应用于此场景?我的意思是以某种方式覆盖此行为

我的团队决定不从数据库中删除条目,而是给它们一个状态,如
ACTIVE
DELETED

当我收集其他实体时,问题就出现了,我们称之为
Customer

@Entity
public class Customer {
    @ManyToMany
    private List<Order> orders;

    private MyEnumStatus status;

    ...
}

我的问题是-是否可以将状态字段(订单实体)应用于此场景?我的意思是以某种方式覆盖此行为以设置状态,而不是删除条目。

您需要实现逻辑删除。有关更多信息,请参见此。

是的

您可以使用事件或拦截器。这两种情况都在中描述。这个选项很强大,但很复杂。玩它的风险由你自己承担


软删除可能是更好的选择@mdatwood的链接显示了一种方法。有一个更完整的例子。不要忘记调整所有查询,只返回未删除的对象。示例中提到了这一点。

您可以在客户实体中使用@SQLDelete注释覆盖remove()方法实现,如下所示:

@Entity
@SQLDelete(sql="UPDATE customer SET status = 'deleted' WHERE id = ?")
public class Customer {
    @ManyToMany
    private List<Order> orders;

}
@实体
@SQLDelete(sql=“更新客户集状态='deleted'其中id=?”)
公共类客户{
@许多
私人名单订单;
}
@Entity
@SQLDelete(sql="UPDATE customer SET status = 'deleted' WHERE id = ?")
public class Customer {
    @ManyToMany
    private List<Order> orders;

}