我有一个奇怪的问题,我不认为这是正常的行为(至少我找不到任何关于它的提及,它似乎是不正确的)。这是我的关联映射:
/**
* @ORM\Entity
*/
class Node extends Entity
{
// ...
/**
* @ORM\ManyToOne(targetEntity="\Content", inversedBy="nodes")
* @ORM\JoinColumn(nullable=true)
*/
protected $content;
// ...
}
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="entity_class", type="string")
*/
abstract class Content extends Entity
{
// ...
/**
* @ORM\OneToMany(targetEntity="\Node", mappedBy="content")
*/
protected $nodes;
// ...
}
当我获取一个节点实体使用:
$em->getRepository('Node')->find(1);
条令也会加载相关的内容实体,没有明显的原因吗?我知道一对多的关系总是很紧张,但我不认为多对一关系是这样的吗?
我已经使用SQL logger准确地检查了正在发生的事情,我看到了对数据库的两个单独的查询。我没有在线听众或类似的东西。显式设置fetch=“LAZY”
(默认设置)没有任何效果。
有人知道这里发生了什么吗?
哦,这就是原因:
类表继承有一个一般的性能考虑:如果将CTI实体作为多对一或一对一实体使用,则永远不要将继承层次结构的上层的一个类作为“targetEntity”,只使用那些没有子类的类。否则,条令无法创建此实体的代理实例,并且将始终急切地加载该实体。
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html
是否可以在每个实体的基础上实施条令2中的自定义水合作用和持久性? 原则2对价值对象(如集合和ID)有一些主要限制。我想知道是否可以使用自定义机制(或实现)将对象属性映射到数据库(加载和持久化)。 我知道有一些可能“解决”这个问题,但我不喜欢其中任何一个: 伪实体需要在实体中正确处理,从而将持久性层泄漏到域对象中 我知道条令中的生命周期事件可能是有用的。我无法确定postLoad事件是否携带一个已经
我有两个对象,分别是和。它们都正确地映射了条令注释和Adresa是一对一的关联。 我可以使用实体管理器分别加载Osoba和Adresa。只要Osoba没有填充属性Adresa,它就可以正常工作。但当我用属性Adresa保存Osoba并试图从数据库检索对象时,抛出了一个错误。 这就是我试图获取对象Osoba的方式。数据库中id为13的Osoba包含指向Adresa表的id。 抛出的错误是 这是我的O
请帮帮我。当我尝试运行sql命令时,会收到以下消息: 我正在尝试实现一种多对多的关系。
我有三个表/实体: > 游戏 网站游戏 地点 我必须在教义2中写查询,这将使所有游戏(作为对象)可用于特定的网站(得到这个特定的网站作为对象)。唯一的关系(多对一)在表/实体SiteGame中,它包含列/对象: 游戏/游戏id 站点/站点id 通常,原始SQL看起来像(并且可以工作): 这是我在教义中尝试过的,但失败了: 错误:路径表达式无效。必须是StateFieldPathExpression
我的问题:当我删除一个项目实体时,它被从Project表中移除,但是这个项目和标记之间的project_tag表中的关系没有被删除。然后,如果我创建了一个新的项目实体,就会抛出一个异常。 实体: 标签 控制器中操作的完整代码:
我在Django中创建了一个数据模型,它具有多对一关系(N个主题对1个用户),如下所示: 来自django。db从django导入模型。contrib。auth。模型导入用户 当我尝试在“管理”页面中加载数据模型时,出现以下错误: 我错过了数据模型中的什么吗? 谢谢。