pol*_*n23 3 orm composite-primary-key doctrine-orm
我有一个特定情况,其中一个实体的复合主键是另一个实体的主键的一部分.这是专业化的案例,但现在并不重要.
我使用Doctrine从数据库生成实体,但Doctrine不支持复合外键作为主键:
It is not possible to map entity 'XXXXX' with a composite primary key as part of the primary key of another entity 'YYYYYY#id_xxxxx'
Run Code Online (Sandbox Code Playgroud)
有谁知道这种情况的解决方案?它可以是Doctrine解决方案或编辑模型和数据库结构.
更新1
CREATE TABLE `amandman` (
`iddokumenta` int(11) NOT NULL,
`datumdostavljanjaskupstini` date NOT NULL,
`tekst` text,
`datumizmene` date DEFAULT NULL,
`izmenjenitekst` text,
`iddokumentapredlogazakona` int(11) DEFAULT NULL,
`datumdostavljanjaskupstinipredlogazakona` date DEFAULT NULL,
PRIMARY KEY (`iddokumenta`,`datumdostavljanjaskupstini`),
KEY `iddokumentapredlogazakona_idx` (`iddokumentapredlogazakona`,`datumdostavljanjaskupstinipredlogazakona`),
CONSTRAINT `iddokumenta45` FOREIGN KEY (`iddokumenta`, `datumdostavljanjaskupstini`) REFERENCES `dokument` (`iddokument`, `datumdostavljanjaskupstini`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `iddokumentapredlogazakona` FOREIGN KEY (`iddokumentapredlogazakona`, `datumdostavljanjaskupstinipredlogazakona`) REFERENCES `predlogzakona` (`iddokumenta`, `datumdostavljanjaskupstini`) ON DELETE NO ACTION ON UPDATE CASCADE)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
这是Doctrine无法生成的数据库实体之一.
您遇到此问题,因为您的复合外键是另一个表的复合主键.这不是一个好的开发实践,这就是为什么它根本没有得到Doctrine的支持,我强烈怀疑它将永远存在.
解决方案1(首选):
添加一个自动增量主键EstablecimientosSec.然后,您可以链接到该链接EstablecimientosSec.id.
解决方案2:
如果绝对不可能更改数据库结构,请不要映射关系.相反,您可以EstablecimientosSec使用复合主键在单独的查询中获取相关实体.它不是一个完美的解决方案,但它在这些约束下工作.提示:避免将相关对象作为循环的一部分进行查询.
| 归档时间: |
|
| 查看次数: |
2345 次 |
| 最近记录: |