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

被引用对象保存时是否更新被引用对象?

景光赫
2023-03-14
Tenant tenant = tenantRepository.findById(id).orElseThrow();
House house = tenant.getHouse();

house.setPrice(340_000);
house = houseRepository.save(house); // A new instance is returned by the CrudRepository::save() method

// TODO Is this necessary for further use?
tenant.setHouse(house);

// Further use...
tenant.setAge(23);
tenant = tenantRepository.save(tenant); // Otherwise it is saved with the old reference where house's ID can be null?
...

是否有必要向租户更新房屋的新引用?

编辑:为了澄清,您可以假设实体是在上面的代码之前加载的(因此,处于托管状态)。因为这个“事务”是Spring@requestmapping函数的一部分,所以事务将在它的末尾隐式提交。

编辑二:问题不在于我是否应该在一开始就把房子存起来,以避免这种情况。它是关于更好地理解对象是如何管理的。

共有1个答案

孙弘博
2023-03-14

关键问题是房屋承租人是否已经被管理的实体?

如果是(因为它们被加载到仍在运行的同一事务中),所涉及的所有house实例都是相同的,您不需要在tanent中设置house。但在这种情况下,您甚至不需要调用save。

如果它们是分离的实例,是的,您需要调用tenant.sethouse(house);。如果没有它,您将得到一个异常或覆盖对house的更改,这取决于您对关系的级联设置。

    null
 类似资料:
  • 问题内容: 一个简单的问题,Java中的列表是否按值或引用保存对象?如果我将一个对象放在列表中,然后再更改其值之一,列表中的那个对象将具有更新后的值吗? 问题答案: Java中的列表是否按值或引用保存对象? 该 列表 是一个包含对象引用的有序集合。 如果我将一个对象放在列表中,然后再更改其值之一,列表中的那个对象将具有更新后的值吗? 您只能更改/更新 可变 对象。您无法通过它们的引用更新 不可变

  • 我对JPA和manytoone的关系感到困惑,我有一个类“Judiction”,它有很多“Judidget”,当我试图将一个Judidge实例存储到postgres db中时,它抛出错误消息如下: 判断类: 还有我的服务课: 在我的数据库中,我有判断表和用户表,我需要为多通关系创建一个作为判断用户的表吗?

  • 问题内容: 我想在本地保存具有循环引用的对象。我有什么选择? 我的第一个想法是使用HTML5本地存储,但是由于循环引用,我无法对该对象进行字符串化。 具体来说,我正在尝试保存当前选择的DOMSelection对象。 例: 我现在可以使字符串化工作的唯一方法是忽略某些对象,如下所示: 但这给我留下了一个相当空的DOMSelection对象,不足以满足我的需要。 还有其他方法可以保存该对象吗?唯一的要

  • 我有GWT的Spring入学申请。在服务器端,我为所有实体提供了简单的JpaRepository接口,例如: 有一个MyEntity类与My其他Entity类有一对一的关系。当我调用我的实体服务持久化方法时 将只保存myEntity对象。MyEntity的所有子对象都被忽略。保存myEntity对象和myOtherEntity对象的唯一方法是调用 在上面的代码之前。那么有没有更优雅的方法来使用Jp

  • 问题内容: 我使用Spring 3.2.3和Hibernate 4.2.3和JDK 7。 我有一个简单的实体: 我使用带有注释方法的带注释的类保存了该实体的实例,该方法使用了DAO,该DAO将对象保存为 之后,我使用 保存的 实体进行创建,该实体在关系中使用了它… 并定义为… 我总是例外 我尝试在其他文章中建议的与的关系中使用一些层叠定义,但没有效果。 如果我通过使用某些HQL查询通过查找保存的实

  • 我有一个数据库,有两个表Batchstatistics和ReconProcessDateTracker。我想了解他们之间的关系。我使用以下模型类使用hibernate实现这一点: } } 当我试图保存它时,我得到的错误对象引用了一个未保存的瞬态实例——在刷新之前保存瞬态实例:com。美国药典。实体TBLBatch统计