DDC-1636: JoinColumn with name the same as id generates wrong SQL. #2054

Closed
opened 2026-01-22 13:38:58 +01:00 by admin · 4 comments
Owner

Originally created by @doctrinebot on GitHub (Feb 6, 2012).

Originally assigned to: @beberlei on GitHub.

Jira issue originally created by user @guilhermeblanco:

Issue came from Hussani de Oliveira on MSN.
He has this Entities configuration:

Usuario.php

<?php

namespace App\UsuariosBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/****
 * @ORM\Entity
 * @ORM\Table(name="usuarios")
 */
class Usuario
{
    /****
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="usuarios_id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /****
     * @var string
     *
     * @ORM\Column(name="nome", type="string", length=45)
     */
    protected $nome;

    /****
     * @var string
     *
     * @ORM\ManyToOne(targetEntity="PerfilUsuario", fetch="EAGER")
     * @ORM\JoinColumn(name="perfil*usuarios_id", referencedColumnName="perfil_usuarios*id")
     */
    protected $perfil;

    // getters and setters
}

PerfilUsuario.php

<?php

namespace App\UsuariosBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/****
 * @ORM\Entity
 * @ORM\Table(name="perfil_usuarios")
 */
class PerfilUsuario
{
    /****
     * @var integer
     * @ORM\Id
     * @ORM\Column(name="perfil*usuarios*id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /****
     * @ORM\ManyToOne(targetEntity="Secoes", fetch="EAGER")
     */
    protected $secoes;

    // getters and setters
}

Whenever he tries to load User (Usuario) and automatically join the UserProfle (PerfilUsuario), it generates the wrong SQL:

SELECT 
    t0.usuarios*id AS usuarios*id1, 
    t0.nome AS nome2, 
    t0.email AS email3,
    t0.login AS login4,
    t0.senha AS senha5,
    t0.cargo AS cargo6,
    t0.perfil*usuarios_id AS perfil_usuarios*id7,
    t8.perfil*usuarios_id AS perfil_usuarios*id9,
    t8.secoes*id AS secoes*id10 
FROM usuarios t0 
LEFT JOIN perfil_usuarios t8 
  ON t0.perfil*usuarios_id = t11.perfil_usuarios*id

His schema dump:

SET @OLD*UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE*CHECKS=0;
SET @OLD*FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY*CHECKS=0;
SET @OLD*SQL_MODE=@@SQL_MODE, SQL*MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `aquario` DEFAULT CHARACTER SET utf8 COLLATE utf8*unicode*ci ;
USE `aquario` ;

-- -----------------------------------------------------
-- Table `aquario`.`perfil_usuarios`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `aquario`.`perfil_usuarios` (
  `perfil*usuarios*id` INT(11) NOT NULL ,
  `nome` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL ,
  PRIMARY KEY (`perfil*usuarios*id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8*unicode*ci;


-- -----------------------------------------------------
-- Table `aquario`.`usuarios`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `aquario`.`usuarios` (
  `usuarios_id` INT(11) NOT NULL ,
  `perfil*usuarios*id` INT(11) NULL DEFAULT NULL ,
  `nome` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL ,
  `email` VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL ,
  `login` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL ,
  `senha` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL ,
  `cargo` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL ,
  PRIMARY KEY (`usuarios_id`) ,
  INDEX `FK*PERIFIL_USUARIOS_PERFIL_USUARIOSID_PERFIL_USUARIOS` (`perfil_usuarios*id` ASC) ,
  CONSTRAINT `FK*PERIFIL_USUARIOS_PERFIL_USUARIOSID_PERFIL*USUARIOS`
    FOREIGN KEY (`perfil*usuarios*id` )
    REFERENCES `aquario`.`perfil*usuarios` (`perfil_usuarios*id` ))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8*unicode*ci;
Originally created by @doctrinebot on GitHub (Feb 6, 2012). Originally assigned to: @beberlei on GitHub. Jira issue originally created by user @guilhermeblanco: Issue came from Hussani de Oliveira on MSN. He has this Entities configuration: **Usuario.php** ``` <?php namespace App\UsuariosBundle\Entity; use Doctrine\ORM\Mapping as ORM; /**** * @ORM\Entity * @ORM\Table(name="usuarios") */ class Usuario { /**** * @var int * * @ORM\Id * @ORM\Column(name="usuarios_id", type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /**** * @var string * * @ORM\Column(name="nome", type="string", length=45) */ protected $nome; /**** * @var string * * @ORM\ManyToOne(targetEntity="PerfilUsuario", fetch="EAGER") * @ORM\JoinColumn(name="perfil*usuarios_id", referencedColumnName="perfil_usuarios*id") */ protected $perfil; // getters and setters } ``` **PerfilUsuario.php** ``` <?php namespace App\UsuariosBundle\Entity; use Doctrine\ORM\Mapping as ORM; /**** * @ORM\Entity * @ORM\Table(name="perfil_usuarios") */ class PerfilUsuario { /**** * @var integer * @ORM\Id * @ORM\Column(name="perfil*usuarios*id", type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /**** * @ORM\ManyToOne(targetEntity="Secoes", fetch="EAGER") */ protected $secoes; // getters and setters } ``` Whenever he tries to load User (Usuario) and automatically join the UserProfle (PerfilUsuario), it generates the wrong SQL: ``` SELECT t0.usuarios*id AS usuarios*id1, t0.nome AS nome2, t0.email AS email3, t0.login AS login4, t0.senha AS senha5, t0.cargo AS cargo6, t0.perfil*usuarios_id AS perfil_usuarios*id7, t8.perfil*usuarios_id AS perfil_usuarios*id9, t8.secoes*id AS secoes*id10 FROM usuarios t0 LEFT JOIN perfil_usuarios t8 ON t0.perfil*usuarios_id = t11.perfil_usuarios*id ``` His schema dump: ``` SET @OLD*UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE*CHECKS=0; SET @OLD*FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY*CHECKS=0; SET @OLD*SQL_MODE=@@SQL_MODE, SQL*MODE='TRADITIONAL'; CREATE SCHEMA IF NOT EXISTS `aquario` DEFAULT CHARACTER SET utf8 COLLATE utf8*unicode*ci ; USE `aquario` ; -- ----------------------------------------------------- -- Table `aquario`.`perfil_usuarios` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `aquario`.`perfil_usuarios` ( `perfil*usuarios*id` INT(11) NOT NULL , `nome` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL , PRIMARY KEY (`perfil*usuarios*id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8*unicode*ci; -- ----------------------------------------------------- -- Table `aquario`.`usuarios` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `aquario`.`usuarios` ( `usuarios_id` INT(11) NOT NULL , `perfil*usuarios*id` INT(11) NULL DEFAULT NULL , `nome` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL , `email` VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL , `login` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL , `senha` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL , `cargo` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8*unicode*ci' NULL DEFAULT NULL , PRIMARY KEY (`usuarios_id`) , INDEX `FK*PERIFIL_USUARIOS_PERFIL_USUARIOSID_PERFIL_USUARIOS` (`perfil_usuarios*id` ASC) , CONSTRAINT `FK*PERIFIL_USUARIOS_PERFIL_USUARIOSID_PERFIL*USUARIOS` FOREIGN KEY (`perfil*usuarios*id` ) REFERENCES `aquario`.`perfil*usuarios` (`perfil_usuarios*id` )) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8*unicode*ci; ```
admin added the Bug label 2026-01-22 13:38:58 +01:00
admin closed this issue 2026-01-22 13:38:58 +01:00
Author
Owner

@doctrinebot commented on GitHub (Feb 11, 2012):

Comment created by @FabioBatSilva:

Hi,
I'm trying to test this, But I can't reproduce.
I'm attaching a test case.

Hussani Oliveira ,
Can you try to change the test to make it fail ?

@doctrinebot commented on GitHub (Feb 11, 2012): Comment created by @FabioBatSilva: Hi, I'm trying to test this, But I can't reproduce. I'm attaching a test case. Hussani Oliveira , Can you try to change the test to make it fail ?
Author
Owner

@doctrinebot commented on GitHub (Apr 7, 2012):

Comment created by @beberlei:

No feedback was given on this critical issue with proof of working through TestCase. Closing until further feedback.

@doctrinebot commented on GitHub (Apr 7, 2012): Comment created by @beberlei: No feedback was given on this critical issue with proof of working through TestCase. Closing until further feedback.
Author
Owner

@doctrinebot commented on GitHub (Apr 7, 2012):

Issue was closed with resolution "Can't Fix"

@doctrinebot commented on GitHub (Apr 7, 2012): Issue was closed with resolution "Can't Fix"
Author
Owner

@doctrinebot commented on GitHub (Dec 13, 2015):

Imported 1 attachments from Jira into https://gist.github.com/22b07a0d205be56f034c

@doctrinebot commented on GitHub (Dec 13, 2015): Imported 1 attachments from Jira into https://gist.github.com/22b07a0d205be56f034c - [11159_DDC1636Test.php](https://gist.github.com/22b07a0d205be56f034c#file-11159_DDC1636Test-php)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: doctrine/archived-orm#2054