Skip to content

Loading…

DDC-2543: EntityManager#getReference returns NULL on JOINED inheritance. #3268

Closed
doctrinebot opened this Issue · 7 comments

2 participants

@doctrinebot

Jira issue originally created by user naroga:

The following line returns null, when it shouldn't:

    $em->getReference('app:PessoaJuridica', 3);

PessoaJurica inherits from Pessoa. Here goes the mapping.

 /****
 * Pessoa
 *
 * @Table(name="pessoa")
 * @Entity(repositoryClass="Sicneo\Database\Repository\Pessoa")
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="tipo", type="string")
 * @DiscriminatorMap({
 *     "Física" = "PessoaFisica",
 *     "Jurídica" = "PessoaJuridica",
 *     "Internacional" = "PessoaInternacional"
 * })
 * @copyright Copyright (c) 2012 Funarbe Inc. (http://www.funarbe.org.br)
 */
class Pessoa
{
    ...
}
/****
 * PessoaJuridica
 *
 * @Table(name="pessoajuridica")
 * @Entity(repositoryClass="Sicneo\Database\Repository\PessoaJuridica")
 *
 * @copyright Copyright (c) 2012 Funarbe Inc. (http://www.funarbe.org.br)
 */
class PessoaJuridica extends Pessoa
{
    ...
}

The thing is: both 'Pessoa' and 'PessoaJuridica' with ID=3 exist on the database. Pessoa.tipo = "Jurídica". Everything seems to be correctly set up, but getReference keeps returning null.

These are my tables:

mysql> SELECT * FROM pessoa;
|| id || nome || tipo || ativo || dtregistro ||
| 1 | Bruno | Física | 1 | 2013-01-01 00:00:00 |
| 2 | Gestor teste | Jurídica | 1 | 2013-01-01 00:00:00 |
| 3 | Coordenador teste | Jurídica | 1 | 2013-01-01 00:00:00 |
| 4 | Pessoa Internacional | Internacional | 1 | 2013-01-01 00:00:00 |
| 5 | Empresa | Jurídica | 1 | 2013-01-01 00:00:00 |
5 rows in set (0.00 sec)

mysql> SELECT id, cnpj FROM pessoajuridica;
|| id || cnpj ||
| 3 | 33153182000190 |
| 5 | 88302137000141 |
| 2 | 99276220000100 |
3 rows in set (0.00 sec)

More info:
$em->getRepository("app:Pessoa")->find(3); //returns a PessoaJuridica entity, as it should.
and

$em->getRepository("app:PessoaJuridica")->find(3); // returns null. No idea why.

@doctrinebot

Comment created by @ocramius:

Did you validate your mappings first? Also, is PessoaJuridica a leaf of your inheritance?

@doctrinebot

Comment created by naroga:

Symfony's profiler tells me there are no invalid mappings. Also, as you can see from the entities above, PessoaJuridica inherits from Pessoa and is defined on the DiscriminatorMap. It is a leaf. Everything seems to be consistent, but I keep getting null when trying to fetch the entity (from ->find(3)) or its proxies (from ->getRereference).

@doctrinebot

Comment created by @ocramius:

[~naroga] what about the logged SQL ? Any queries being run?

@doctrinebot

Comment created by naroga:

My logging is disabled. I'm not really running the project with symfony, I'm running with Zend Framework 1. I only imported the mappings to a symfony project and called an entity on the controller so I could have my mappings validated. The error occurs on a real life scenario, on ZF1. I have no SQL loggers there.

@doctrinebot

Comment created by @ocramius:

[~naroga] can you attach an EchoSQLLogger to your connection and see if the query is going through and if it's then a problem in SQL or in the UnitOfWork?

https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php

@doctrinebot

Comment created by naroga:

There was no bug. After much debugging, I figured out the problem. Something was messing with the tables, causing the issue.

@doctrinebot

Issue was closed with resolution "Invalid"

@beberlei beberlei was assigned by doctrinebot
@doctrinebot doctrinebot closed this
@doctrinebot doctrinebot added the Bug label
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.