【问题标题】:EntityManager merge() in JPAJPA 中的 EntityManager 合并()
【发布时间】:2015-05-25 00:07:06
【问题描述】:

我正在开发一个使用 JPA 管理数据库中的两个表的应用程序。第一个包含用户,第二个包含项目;一个用户可以有很多项目,但一个项目只对应一个用户。这意味着从用户到项目存在一对多关系,从项目到用户存在多对一关系。

我的应用程序是 RESTful 服务,我目前正在通过网络将 DTO 传输到显示实体信息的网络应用程序。当我将信息从用户实体转换为用户 DTO 时,我无法发送其所有项目,因为它们可能太多,所以我从用户数据库中获取一个实体并将其转换为没有项目的 DTO。

我的问题是,如果我想更新用户的信息,当我将 DTO 转换回实体时,它不会有任何项目,那么,如何保存更改以保留代表用户项目的外键更新其信息?

我知道 EntityManager 使用 merge() 方法来更新数据库中的信息,但是,这不会影响我要保留的外键吗?因为我试图保存一个没有项目的实体?

【问题讨论】:

    标签: rest jpa merge entitymanager dto


    【解决方案1】:

    您只需从 EM 中检索一个用户对象, 更新已更改(或全部)的字段 提交事务(如果您手动管理事务)

    DTO modification = ...
    em.getTransaction().begin(); //if it is not container managed
    User user = em.find(User.class,modification.getId());
    user.setName(modification.getName());
    user.setXXX...
    em.getTransaction().commit()l //if it is not managed
    

    通常,项目将延迟加载,因此根本不会检索它们。即使从 JPA 检索的 User 对象将具有有关它们的完整信息,只要您不修改其项目内容,项目将保持不变。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2013-02-11
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多