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

Doctrine2无法更新多对一双向关系中的拥有方

彭礼骞
2023-03-14

我在实体“任务”和实体“用户”之间有双向关联。

“任务”定义如下

class Task 
{
    /**
     *
     * @ORM\ManyToOne(targetEntity="User", inversedBy="tasks")
     */
     private user;
}

“用户”的定义是


class User 
{
    /**
     * @ORM\OneToMany(targetEntity="Task", mappedBy="user")
     */
    private $tasks;
}

从两个方向访问关系很好。问题是,一旦定义了“Task”实体,我就无法更新它。

这是一个测试案例


    $task->setStatus(new Status(2))
    $em->flush();

我做错了什么?

共有1个答案

苗森
2023-03-14

在刷新之前,您需要像这样持久化任务对象:$em-

阅读如何使用教义协会。

 类似资料:
  • 在一对多关系中,通常使用@ManyToOne注释的字段是所有者-另一方具有“mappedBy”属性。但是,如果我跳过“mappedBy”并用@JoinColumn(同一列)注释两侧,我可以更新两侧-更改将传播到db。 我没有两个单向关系而不是一个双向关系-只有一个连接列。 没有选择一方作为关系所有者会遇到什么问题? 我的实体看起来类似于以下内容: 它似乎对性能没有任何影响(至少看起来不错),下面是

  • 问题内容: 我的实体中存在双向多对多关系。请参阅以下示例: 当我尝试将其序列化为JSON时,出现以下异常: “ java.lang.IllegalArgumentException:无法处理托管/反向引用’COLLABORATION_TAG’:反向引用类型(java.util.Set)与托管类型(foo.Collaboration)不兼容。 实际上,我知道这很有意义,因为javadoc明确声明您不

  • 我在我的实体中有一种双向的多对多关系。请参见下面的示例: 当我尝试将其序列化为JSON时,我得到了以下异常:' “java.lang.IllegalArgumentException:无法处理托管/反向引用'COLLABORATION_TAG':反向引用类型(java.util.Set)与托管类型(foo.COLLABORATION)不兼容。”。 实际上,我知道这是有道理的,因为javadoc明确

  • 给定以下具有双向一对多关系的JPA实体 如果我从已经包含一些项目的数据库加载购物车 我想用一个新的物品集合替换购物车中的物品 执行此更换的最简单/最佳方法是什么?理想情况下,我希望生成的SQL语句合理高效,但我的主要目标是使用简洁易读的代码执行替换。 为了明确我所说的替换是什么意思,如果购物车最初包含ID为2、3、4的项目,并且包含4、5、6,那么在替换之后,购物车应该包含ID为4、5、6的项目。

  • 问题内容: 我有一个非常简单的设置,可以尝试使用注释进行双向映射: 和 当我设置属性TypeA.bs时,虽然应该,但它不会影响映射。请参见以下示例: 如果映射是双向的,则应填充集合,并且应更新b的属性a,但不是。有任何想法吗? 编辑 感谢您的帮助,现在我明白了! 问题答案: 对于一致的域模型,应始终设置关系的两端,如下所示: 当您的实体处于不一致状态时,JPA将始终根据JPA关系拥有方的对象状态存

  • 假设我们要实现一个简单的从 Parent 到 Child 的 <one-to-many> 关联。 <set name="children"> <key column="parent_id"/> <one-to-many class="Child"/> </set > 如果我们运行下面的代码: Parent p = .....; Child c = new Child(); p.