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

如何在用户类Spring Boot中更新用户列表

蒋高超
2023-03-14

我有一个Java用户类,用户可以有朋友(列表

问题是,当我在代码中更改朋友并保存(用户)时,spring会添加新朋友,但不会在数据库中删除从数组列表中删除的朋友。

@Entitypublic class User implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String pseudo;
private String password;
private String email;
private Gender gender;
@Lob
private byte[] avatar;
private String description;
private Date birthdate;

@ManyToMany(cascade = CascadeType.ALL)
private List<Game> favoriteGames = new ArrayList<>();

@OneToMany( cascade = CascadeType.ALL)
private List<User> friends = new ArrayList<>();

我试过@manytomy,@OneToMany,cascade=CascadeType。全部

共有1个答案

田英卓
2023-03-14

基本上,首先我建议您特别注意实体中的equals和hashCode实现。您没有向我们展示,但在您的用户中应该是这样的。java:

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (!(o instanceof User)) {
        return false;
    }
    User other = (User) o;
    return id != null && id.equals(other.getId());
}

@Override
public int hashCode() {
    return getClass().hashCode();
}

这些非常重要,尤其是在与集合中的实体合作时。

其次,应该对用户和他的朋友(其他用户)之间的连接进行多对多建模,因为:

  • 每个用户都可以成为许多其他用户的朋友
  • 每个用户可以有任意数量的朋友,换句话说,很多朋友

我会像这样模拟这种联系:

@ManyToMany
@JoinTable(name = "user_friends", joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "friend_user_id"))
private Set<User> friends = new HashSet<>();
 类似资料:
  • 现在,如果用户进行了登录,他可以选择编辑他的用户帐户设置。这将更改数据库中的用户对象(例如,用于登录的用户名)。现在,如果他注销,我希望应用程序重新加载userlist,这样用户就可以使用他的新用户名。这怎么可能? 问候辛奇拉

  • 编辑用户信息的方法和创建新用户差不多(参见第 7 章),创建新用户的页面在 new 动作中处理,而编辑用户的页面在 edit 动作中处理;创建用户的过程在 create 动作中处理 POST 请求,编辑用户要在 update 动作中处理 PATCH 请求(旁注 3.2)。二者之间最大的区别是,任何人都可以注册,但只有当前用户才能更新自己的信息。我们可以使用第 8 章实现的认证机制,通过“事前过滤器

  • 我想保存学生和教师的信息使用单一的邮政API。如果我选择“学生”类型,数据将保存在学生表中。如果我选择“教师”类型,数据将保存在教师表中。但是该操作将由一个API调用完成。

  • 我正在使用Laravel。我想禁用新用户的注册,但我需要登录才能工作。 如何禁用注册表/路由/控制器?

  • 如何在MVC 5中获取当前登录用户的id?我尝试了StackOverflow建议,但它们似乎不适用于MVC 5 另外,MVC 5为用户分配资源的最佳实践是什么?(例如,

  • 我正在用JavaFx乞讨,我意识到我需要一些帮助在运行时用一些TreeItems更新一个TreeView,它应该在主窗口中更新。 在这里,可以看到两个窗口的截图: 较大的是主窗口,它调用(通过在文件中单击>>New Project),New Small。在较小的窗口中,我可以得到键入的字符串,然后单击enter按钮。 请假设我在FXML文件中映射了所有的内容。谢谢