orm - Doctrine 复合主键作为另一个实体的主键的一部分

标签 orm doctrine-orm composite-primary-key

我有一个特定的情况,一个实体的复合主键是另一个实体的主键的一部分。这是特化的情况,但现在无关紧要。

我使用 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'

有人知道这种情况的解决方案吗?可以是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;

这是 Doctrine 无法生成的数据库中的实体之一。

最佳答案

您遇到此问题是因为您的复合外键是另一个表的复合主键。这不是一个好的开发实践,这就是为什么它根本不受 Doctrine 支持的原因,我强烈怀疑它永远不会。

方案一(首选):

EstablecimientosSec 添加一个自动递增的主键。然后,您可以改为链接到该 EstablecimientosSec.id

解决方案 2:

如果改变数据库结构绝对不可能,不要映射关系。相反,您可以使用复合主键在单独的查询中获取相关的 EstablecimientosSec 实体。它不是一个完美的解决方案,但它在这些限制下有效。提示:避免在循环中查询相关对象。

关于orm - Doctrine 复合主键作为另一个实体的主键的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18766541/

相关文章:

entity-framework - Entity Framework 、应用层和关注点分离

java - 如何在 hibernate 实体中按多列定义索引?

Doctrine 2 : What is wrong with the association between these entities?

java - 具有 3 个表和复合主键的定义问题 JPA

eclipse - 为什么这个 JPA 2.0 映射在 Eclipse/JBoss Tools 中给我一个错误?

mysql - 如何将 2 列 mysql 复合主键值显示为第三列中的默认值?

c# - 'big' 使用 Poco 和 ORM 有什么优势?

node.js - Sequelize ORM中HasOne和BelongsTo的区别

mysql - 在异步进程中加载​​ Doctrine 持久化实体

zend-framework - 如何在 ZF2 中执行 INSERT INTO SELECT 查询