Eu sei que esta é uma pergunta antiga, mas me deparei com ela enquanto procurava uma maneira de criar PK composta e pensei que poderia usar alguma atualização.
Na verdade, as coisas são muito mais simples se você precisar de uma chave primária composta. (O que, é claro, garante exclusividade) A documentação do Doctrine contém alguns bons exemplos por este url: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html
Portanto, o exemplo original poderia ser semelhante a este:
/**
* @var string $videoDimension
*
* @ORM\Id @ORM\Column(type="string")
*/
private $videoDimension;
/**
* @var string $videoBitrate
*
* @ORM\Id @ORM\Column(type="string")
*/
private $videoBitrate;
Algumas notas aqui:
- A coluna "nome" é omitida uma vez que o Doctrine é capaz de adivinhá-la com base no nome da propriedade
- Uma vez que
videoDimension
e videoBitrate
são partes do PK - não há necessidade de especificarnullable = false
- Se necessário - o PK composto pode ser composto de chaves estrangeiras, então sinta-se à vontade para adicionar alguns mapeamentos relacionais