Details
Description
I am playing with reverse engineering with Oracle and I have some problems:
My schema:
create table TABLE_TEST1 ( TEST1_FIRST_COLUMN NUMBER(4) not null, TEST1_SECOND_COLUMN VARCHAR2(50) not null, TEST1_THIRD_COLUMN DATE, constraint PK_TABLE_TEST1 primary key (TEST1_FIRST_COLUMN) using index tablespace TBS_INDEX storage ( initial 100K next 100K ) ) storage ( initial 100K next 100K ) tablespace TBS_DATA; create table TABLE_TEST2 ( TEST2_FIRST_COLUMN NUMBER(4) not null, TEST2_SECOND_COLUMN VARCHAR2(50) not null, TEST2_THIRD_COLUMN DATE, TEST1_FIRST_COLUMN NUMBER(4) not null, constraint PK_TABLE_TEST2 primary key (TEST2_FIRST_COLUMN) using index tablespace TBS_INDEX storage ( initial 100K next 100K ) ) storage ( initial 100K next 100K ) tablespace TBS_DATA; alter table TABLE_TEST2 add constraint TABLE_TEST2__TABLE_TEST1 foreign key (TEST1_FIRST_COLUMN) references TABLE_TEST1 (TEST1_FIRST_COLUMN);
My reverse engineering code:
ini_set('display_errors', 1);
set_include_path(realpath(__DIR__ . '/../doctrine-orm/lib/'));
require 'Doctrine/Common/ClassLoader.php';
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', realpath(__DIR__ . '/../doctrine-orm/lib/'));
$classLoader->register();
$config = new \Doctrine\ORM\Configuration;
$cache = new \Doctrine\Common\Cache\ApcCache;
$config->setMetadataCacheImpl($cache);
$driverImpl = $config->newDefaultAnnotationDriver(realpath(__DIR__. '/Infofab/Entities'));
$config->setMetadataDriverImpl($driverImpl);
$config->setQueryCacheImpl($cache);
$config->setProxyDir('Proxies');
$config->setProxyNamespace('Infofab');
$connectionOptions = array(
'dbname' => 'bddmkk',
'user' => 'doctrine',
'password' => 'xxxxxxx',
'host' => 'localhost',
'driver' => 'pdo_oci',
'driverOptions' => array(PDO::ATTR_CASE => PDO::CASE_LOWER)
);
$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
$sm = $em->getConnection()->getSchemaManager();
$em->getConfiguration()->setMetadataDriverImpl(
new \Doctrine\ORM\Mapping\Driver\DatabaseDriver(
$em->getConnection()->getSchemaManager()
)
);
$cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory($em);
$metadata = $cmf->getAllMetadata();
$cme = new \Doctrine\ORM\Tools\Export\ClassMetadataExporter();
$exporter = $cme->getExporter('annotation', 'Infofab');
$exporter->setMetadata($metadata);
$etg = new \Doctrine\ORM\Tools\EntityGenerator;
$exporter->setEntityGenerator($etg);
$exporter->export();
If I run this code, I obtain 2 entities:
<?php /** * TableTest1 * * @Table(name="TABLE_TEST1") * @Entity */ class TableTest1 { /** * @var integer $test1FirstColumn * * @Column(name="TEST1_FIRST_COLUMN", type="integer", nullable=false) * @Id * @GeneratedValue(strategy="SEQUENCE") * @SequenceGenerator(sequenceName="TABLE_TEST1_TEST1_FIRST_COLUMN", allocationSize="10", initialValue="1") */ private $test1FirstColumn; /** * @var string $test1SecondColumn * * @Column(name="TEST1_SECOND_COLUMN", type="string", length=50, nullable=false) */ private $test1SecondColumn; /** * @var datetime $test1ThirdColumn * * @Column(name="TEST1_THIRD_COLUMN", type="datetime", nullable=true) */ private $test1ThirdColumn; }
and
<?php /** * TableTest2 * * @Table(name="TABLE_TEST2") * @Entity */ class TableTest2 { /** * @var integer $test2FirstColumn * * @Column(name="TEST2_FIRST_COLUMN", type="integer", nullable=false) * @Id * @GeneratedValue(strategy="SEQUENCE") * @SequenceGenerator(sequenceName="TABLE_TEST2_TEST2_FIRST_COLUMN", allocationSize="10", initialValue="1") */ private $test2FirstColumn; /** * @var integer $test1FirstColumn * * @Column(name="TEST1_FIRST_COLUMN", type="integer", nullable=false) */ private $test1FirstColumn; /** * @var string $test2SecondColumn * * @Column(name="TEST2_SECOND_COLUMN", type="string", length=50, nullable=false) */ private $test2SecondColumn; /** * @var datetime $test2ThirdColumn * * @Column(name="TEST2_THIRD_COLUMN", type="datetime", nullable=true) */ private $test2ThirdColumn; /** * @var TABLETEST1 * * @OneToOne(targetEntity="TABLETEST1") * @JoinColumns({ * @JoinColumn(name="TEST1_FIRST_COLUMN", referencedColumnName="TEST1_FIRST_COLUMN") * }) */ private $tEST1FIRSTCOLUMN; }
As you can see, it declares 2 times the same column: private $test1FirstColumn; and private $tEST1FIRSTCOLUMN;
Issue Links
- relates to
-
DDC-627
Unexpected Duplicate Field Mapping Exception
-
Fixed and scheduled for BETA 3