gpt4 book ai didi

java - 如何实现删除用户?

转载 作者:行者123 更新时间:2023-12-02 02:07:06 26 4
gpt4 key购买 nike

我正在开发展示库的测试项目。就我的开发而言,我不断遇到问题。

你能帮我解决其中一个吗?

我的模型设计包括 User 和 LeasingHistory 实体,因此当用户借书时 LeasingHistory 表会填充相应的记录。

create table USER
(
ID BIGINT not null serial primary key,
ADDRESS VARCHAR(255) not null,
DOCUMENT_ID VARCHAR(255) not null,
FIRST_NAME VARCHAR(255) not null,
SUR_NAME VARCHAR(255) not null
);

create table LEASING_HISTORY
(
ID BIGINT not null serial primary key,
BOOK_INSTANCE_ID BIGINT not null,
USER_ID BIGINT not null,
START_DATE DATE(10),
ARRANGED_END_DATE DATE(10),
ACTUAL_END_DATE DATE(10),
foreign key (BOOK_INSTANCE_ID) references BOOK_INSTANCE,
foreign key (USER_ID) references USER
);

现在我必须实现用户删除。我该怎么做呢?它是如何在 Google、Facebook 或 StackOverFlow 中实现的?

我认为在这种情况下删除孤儿不是合适的策略,因为不应该清除历史记录。

我想我可以将 isActive 字段添加到用户表中。在这种情况下,当用户按下“删除帐户”按钮时,我可以清除个人信息并分配 isActive = false

你对此有何看法?

更新:我认为用户应该有可能恢复他的帐户,因此在这种情况下 @killjoy 选项更好。你能检查一下我的理解是否正确吗?我引入了附加表UserInternalData,如果用户删除,我将从User实体中清除所有数据(除了id)并设置isDeleted 为 true,dateStamp 为“UserInternalData”中的当前日期

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
class Person {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String firstName;

private String surName;

@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateOfBirth;

}

@Entity
@NoArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public final class User extends Person {

@Builder
public User(Long id, String firstName, String surName, LocalDate dateOfBirth, String documentId, String address) {
super(id, firstName, surName, dateOfBirth);
this.documentId = documentId;
this.address = address;
}

private String documentId;

private String address;

}

@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@EqualsAndHashCode
@ToString
public final class UserInternalData {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToOne
private User user;

boolean isDeleted;

@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateStamp;

}

我说得对吗?

最佳答案

一些需要考虑的方法。

  1. isActive 列(或等效的 isDeleted 列)添加到 USER 表中。删除用户时清除(或设置)该位。您可能还想清除其他敏感信息。这为将来重新激活已删除的用户留下了可能性。

  2. LEASING_HISTORY 中所有受影响行中的 USER_ID 字段替换为表示已删除用户的特殊保留 ID(可能名称如 “已删除的用户”)。

  3. 根据 @killjoy,通过添加将 USER_IDBOOK_INSTANCE_ID 关联的第三个表来规范这两个表,并删除 USER_ID > 来自 LEASING_HISTORY 的列。然后,您可以简单地从第三个表中删除受影响的行,而不会丢失图书租赁历史记录。

附录

再想一想,(3) 可能不是一个好方法。这个想法是将 USER_ID 外键分离到一个单独的表中,但这并不能解决悬空删除外键问题。

也许更可行的方法是:

  • 不要将 USER_ID 限制为外键。这样,您就可以安全地删除 USER 行,而无需进行任何清理。当然,您仍然需要在创建每个新 LEASING_HISTORY 行时(以编程方式)确保引用完整性。
  • 我更喜欢 (1),因为您不会删除任何用户历史记录,只是删除敏感的用户信息。

    关于java - 如何实现删除用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50612492/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com