Orm 作为另一实体主键的一部分的复合主键

Orm 作为另一实体主键的一部分的复合主键,orm,doctrine-orm,composite-primary-key,Orm,Doctrine Orm,Composite Primary Key,我有一个特定的情况,一个实体的复合主键是另一个实体的主键的一部分。这是专业化的例子,但现在不重要了 我使用条令从数据库生成实体,但条令不支持复合外键作为主键: 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' 有人知道这种情况的解决方案吗?它可以是条令解决方案,也可以是编辑模型和数

我有一个特定的情况,一个实体的复合主键是另一个实体的主键的一部分。这是专业化的例子,但现在不重要了

我使用条令从数据库生成实体,但条令不支持复合外键作为主键:

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'
有人知道这种情况的解决方案吗?它可以是条令解决方案,也可以是编辑模型和数据库结构

更新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;

这是数据库中不能由条令生成的实体之一。

您遇到了这个问题,因为您的复合外键是另一个表的复合主键。这不是一个好的开发实践,这就是为什么它没有得到理论的支持,我强烈怀疑它是否会得到支持

解决方案1(首选):

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

解决方案2:


如果绝对不可能更改数据库结构,请不要映射关系。相反,您可以使用复合主键在单独的查询中获取相关的
EstablecimientosSec
实体。这不是一个完美的解决方案,但它在这些约束条件下工作。提示:避免将相关对象作为循环的一部分进行查询。

您所说的“复合”是什么意思?您是将两个键串在一起还是创建了跨越两列的主键?请复制问题中的实体?很抱歉,我的回答太晚了。我所说的复合,是指主键跨越两列。我刚才遇到了同样的问题。解决方案1对我来说是不可能的。解决方案2的确切含义是什么?如何做到这一点?@craphunter不会使用多通将实体连接在一起,这样条令就不会抱怨了。如果需要从另一个表中获取相关记录,请创建一个单独的查询并使用
where table2.id=?
。这有用吗?