【问题标题】:Need to update/remove a list of values based on user's request需要根据用户的请求更新/删除值列表
【发布时间】:2014-06-27 03:46:00
【问题描述】:

我有一个要从数据库中检索并显示给用户的名称列表,然后用户将能够编辑它们或保持它们不变。

我想知道如何实现它以将新值与检索到的值进行比较。

假设值如下

  ID Value
  -------- 
  1  Jack
  2  Daniel
  3  Allen
  4  Nick

一旦显示给用户,他/她就会按照以下方式更改它们

  ID Value 
  --------
  1  Jack Moore  //moore is added
  2  Alex        //value is totally changed
  3             //value is erased
  4  Nick        //unchanged

现在我需要更新前两项的值,从数据库中删除第三项,因为它的新值为空白,最后一项保持不变。

@Entity
Class Names {
   @Id
   @GeneratedValue
   private long id;
   private long value;
   ...
} 

@Entity
class Students {
  @Id
  @GeneratedValue
  private long id;
  @ManyToOne
  private Names name;

}

我可以考虑将值列表放入 cookie 并将 cookie 的值与新值进行比较,但不确定这是否是解决问题的最佳方法。

【问题讨论】:

  • 如果ID 是主键,您可以在数据库中使用新值覆盖记录。对于空值/空白值,如果要删除记录本身,您可能需要单独检查。
  • @NikhilTalreja 我知道,但问题是我应该使用 cookie 来比较提交的值和持久的值吗?
  • 这里不需要 Cookie。只需将整个更新列表带回您的服务器代码并覆盖数据库中的记录。根据需要单独处理删除。
  • @NikhilTalreja 我建议使用 cookie 以避免向数据库发送多个更新请求。
  • 在您的示例中,75% 的记录已更改。如果您认为大多数时候都是这种情况,为什么要花时间确定是否需要更新,然后最终至少要更新 3/4 的时间? Cookie 不适用于此类场景。

标签: java hibernate list cookies


【解决方案1】:

假设您已将名称列表更新为:

    List<Names> namesList = new ArrayList<Names>();
    Names name = new Names();
    name.setId(1);
    name.setValue("Jack Moore");
    namesList.add(name );

    name = new Names();
    name.setId(2);
    name.setValue("Alex");
    namesList.add(name );

    name = new Names();
    name.setId(4);
    name.setValue("Nick");
    namesList.add(name );

将此列表直接发送到 JPA 会话并调用更新。更新将自动处理创建/更新/删除操作。

    session.update(namesList);

所以,最后你只会在你的 db 表中看到以下记录:

ID Value 
--------
1  Jack Moore 
2  Alex       
4  Nick   

【讨论】:

  • 不可能,因为这个实体是另一个实体的成员
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多