完整性约束违反-如何在具有类表继承的原则中创建实体



我在条令中创建继承对象时遇到问题。。。我现在第一次使用教义。。。

一些细节:sql数据库:SQL

DescribeableVersionedEntity是每个Entity继承的超类(继承类型Joined)。(所以我必须使用类继承,是吗?)

实体:

实体

执行代码:

$owner = $this->getEntityManager()->getRepository('ChecklistCoreEntityOwner')->find(3);
$layout = new Layout();
//Add some Attributes... (not listed here)
$layout->owner = $owner;
$translLayout = new Translation($layout);
$translLayout->text = "Translation Layout";
$cl = new Checklist($layout);
$cl->changeNoteComment = "new ChecklistComment";
$cl->owner = $owner;
$translChecklist = new Translation($cl);
$translChecklist->text = "Translation Checklist";
$userChapter = new UserChapter($cl);
$userChapter->owner = $owner;
$userChapter->isActive = true;
$translUserChapter = new Translation($userChapter);
$translUserChapter->text = "Translation UserChapter";

和错误SQL/Message:

文件:

C:Program Files (x86)ZendApache2htdocsChecklistSystemvendordoctrinedballibDoctrineDBALDBALException.php:91

消息:

An exception occurred while executing 'INSERT INTO translation (language, text, describableVersionedEntity) VALUES (?, ?, ?)' with params [null, "Translation UserChapter", null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'describableVersionedEntity' cannot be null

我读过,外键(例如在UserChapter中)必须链接到Top-第一个Parent。在我的例子中,继承路径是:

DescribableVersionedEntity->ChecklistElement->Chapter->UserChapter

因此,我有3个抽象的"父"类,最后一个是可用对象UserChapter。在SQL中,我为每个实体创建了一个表,并使用继承类型"Joined"。

所以下一个问题是:我必须在原则上宣布下一个顶级实体还是顶级实体中的顶级实体为外键?

next-top: UserChapter(FK_UserChapter_Chapter), Chapter(FK_Chapter_ChecklistElement), ChecklistElement(FK_ChecklistElement_DVE) or
top-of-the-top: UserChapter(FK_UserChapter_DescribableVersionedEntity)

我想我必须使用顶部的顶部,因为我不需要创建一个章节对象,例如(如果是UserChapter对象)

那么:我的体系结构在原理上与MySql数据库兼容吗?如果是-为什么创建翻译时出现问题,导致descriptableVersionedEntity为null??

我希望有人能帮助我,我在stackoverflow找不到合适的解决方案。。我很确定这是一个关键问题。。。

提前感谢!!

您必须将UserChapter类添加到DescribableVersionedEntityDiscriminatorMap中。

* @ORMDiscriminatorMap({"describableversionedentity" = "DescribableVersionedEntity", "checklist" = "Checklist", "layout" = "Layout", "checklistelement" = "ChecklistElement", "footnote" = "Footnote", "contentelement" = "ContentElement", "userchapter" = "UserChapter"})

规则是继承的根类(DescribableVersionedEntity)必须包含DiscriminatorMap中的所有子类,而不仅仅是直接子类。子类并没有定义DiscriminatorMap,即使它们是其他类的基。因此,将DiscriminatorMap内容从ChecklistElement移动到根类-DescribableVersionedEntity

相关内容

  • 没有找到相关文章

最新更新