Возможно ли ссылаться на столбец, отличный от 'id' для JoinColumn?

У меня есть объект Item который имеет отношение ManyToOne к объекту Category . Я хочу, чтобы к ним присоединилось поле, отличное от id (в данном случае это поле с именем id2 ). Моя схема приведена ниже.

 class Item { /** * @ORM\Id * @ORM\Column(name = "id", type = "integer") * @ORM\GeneratedValue(strategy = "AUTO") */ protected $id; /** * @ORM\ManyToOne(targetEntity = "Category") * @ORM\JoinColumn(name = "category_id", referencedColumnName = "id2") */ protected $category; } class Category { /** * @ORM\Id * @ORM\Column(name = "id", type = "integer") * @ORM\GeneratedValue(strategy = "AUTO") */ protected $id; /** * @ORM\Column(name = "id2", type = "string", length = "255", unique = "true") */ protected $id2; 

Когда я пытаюсь сохранить Item я получаю эту ошибку:

Примечание. Неопределенный индекс: id2 в документе vendor / doctrine / lib / Doctrine / ORM / Persisters / BasicEntityPersister.php строка 511

Разумеется, если я изменил id2 на id в аннотации JoinColumn , все будет хорошо, но мне нужны объекты, которые будут подключаться через id2 . Это возможно?

редактировать
То, чего я хочу достичь, невозможно в соответствии с официальными документами Doctrine 2.

Невозможно использовать столбцы соединений, указывающие на непервичные ключи. Doctrine подумает, что это первичные ключи и создают ленивые загрузки прокси с данными, что может привести к неожиданным результатам. Doctrine может по соображениям производительности не проверять правильность этих настроек во время выполнения, а только с помощью команды Validate Schema.

источник: http://www.doctrine-project.org/docs/orm/2.1/en/reference/limitations-and-known-issues.html

Я думаю, что Доктрина хочет, чтобы они были первичными ключами, из документов :

name: Имя столбца, которое содержит идентификатор внешнего ключа для этого отношения.

Другая вещь, которая выпрыгивает из меня из вашего примера кода, – это category.id2, являющаяся строкой типа , я бы по крайней мере ожидал, что это будет целое число , но также может быть необходимо, чтобы @JoinColumn работал правильно.

Вы можете уйти с помощью @Index на category.id2 и оставить его как строку ; все равно.

Просто сообщить. Я смог присоединиться к не-ПК в отношении Many2One (однонаправленное), но мой объект не может быть загружен обычным способом. Он должен быть загружен с помощью DQL:

 SELECT d,u FROM DEntity d JOIN d.userAccount u 

таким образом я прекратил получать ошибку: Отсутствует значение для идентификатора первичного ключа ….