我遇到了很多对多关系的问题,当我保存模型时(通过管理员),并没有在模型中更新它们,并尝试在附加到post_save
信号的函数中或save_model
关联的的函数中使用新值AdminModel
。我试图通过使用带有id的get函数在这些函数中重新加载对象,但是它仍然具有旧值。
这是交易问题吗?交易结束时会发出信号吗?
通过管理表单保存模型时,这不是原子交易。首先保存主对象(以确保它具有PK),然后清除 M2M ,并将新值设置为表单中出现的任何值。因此,如果你位于主要对象的save()中,那么你将处于尚未更新M2M的机会之窗中。实际上,如果你尝试对M2M进行操作,则clear()将清除更改。大约一年前,我遇到了这个问题。
与ORM重构之前的代码相比,代码有所变化,但归结为django.db.models.fields.ManyRelatedObjectsDescriptor
和中的代码ReverseManyRelatedObjectsDescriptor
。查看它们的__set __()
方法,你会看到manager.clear()
; manager.add(*value)clear()complete
清除了该表中当前主对象的所有M2M引用。然后,add()
设置新值。
因此,回答你的问题:是的,这是一个交易问题。
问题内容: 我有一些与关系有关的实体: 和 使用某些模型执行保存模型时,一切正常。表存储这些实体的所有键。但是,使用驱动程序保存模型时,表不会更改。我认为映射存在问题。 问题答案: 那是预期的行为。在双向多对多关联中,一侧必须是反侧。在您的情况下,这是一面,因为它包含: 拥有关系的字段。除非关系是单向的,否则为必需。 这意味着是关联的所有者,并且Hibernate仅在维护关联时检查该侧。
将数据保存到数据库时,我收到异常 org.hibernate.TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例:com.example.api.entity.Product 我有两个实体。 用户.java 产品.java 我有一个JSON需要添加数据。 } 我阅读了这个ex的内容,并试图将Casca eType更改为另一个,但没有帮助。
当我试图使用ebean缓存系统(带有io.ebean:ebean-redis)读取@ManyTomany关系时,我遇到了一个异常。这是一个springboot应用程序。 我正在使用的版本: SpringBootVersion=2.4.3 MariaDbVersion=2.7.2 EBeanVersion=12.7.2 Flywayversion=7.7.0 BaseModel Java类: 文章J
问题内容: 我下面有两个… 我想更新的,有时也用下面的方法有时… 方法#1 方法#2 第一种方法可以正常工作,但第二种则不能。但是,当我将“ 从” 移至“ 第二”方法时,效果很好,而不是第一个。 问题答案: 问题是一个问题。 假设它是的子类,那么您的问题是关系中只有一方是拥有实体。将使得实体所属的实体,因此仅改变该实体被持久化。这意味着,你必须更新在这两种情况下的实体。如果您有一个“ a”的组列表
下面是我的代码的一个片段。调用filteredData()时,状态未更新。在状态更新之前,我必须单击按钮两次。这是一个旧项目,我正在使用钩子更新它。我以前在设置状态后使用了回调函数,但我不能用钩子实现。 }
问题内容: 我想保持与ManyToMany关系的实体。但是我在坚持过程中遇到了一些问题。 我的实体: 和 服务代码: 第一次,当我尝试使用UserRoles“ ROLE_USER”保留用户时,没有问题。插入User和UserRoles以及联接表。 我的问题是当我尝试使用相同的UserRoles保留第二个User时。我通过找到它来检查UserRoles是否存在( userRolesServices.