--- /dev/null
+<?php
+
+namespace Doctrine\Tests\ORM\Functional\Ticket;
+
+require_once __DIR__ . '/../../../TestInit.php';
+
+class DDC531Test extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+ protected function setUp()
+ {
+ parent::setUp();
+ $this->_schemaTool->createSchema(array(
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC531Item'),
+ $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC531SubItem'),
+ ));
+ }
+
+ public function testIssue()
+ {
+ $item1 = new DDC531Item;
+ $item2 = new DDC531Item;
+ $item2->parent = $item1;
+ $item1->getChildren()->add($item2);
+ $this->_em->persist($item1);
+ $this->_em->persist($item2);
+ $this->_em->flush();
+ $this->_em->clear();
+
+ $item3 = $this->_em->find(__NAMESPACE__ . '\DDC531Item', $item2->id); // Load child item first (id 2)
+ // parent will already be loaded, cannot be lazy because it has mapped subclasses and we would not
+ // know which proxy type to put in.
+ $this->assertInstanceOf(__NAMESPACE__ . '\DDC531Item', $item3->parent);
+ $this->assertNotInstanceOf('Doctrine\ORM\Proxy\Proxy', $item3->parent);
+ $item4 = $this->_em->find(__NAMESPACE__ . '\DDC531Item', $item1->id); // Load parent item (id 1)
+ $this->assertNull($item4->parent);
+ $this->assertNotNull($item4->getChildren());
+ $this->assertTrue($item4->getChildren()->contains($item3)); // lazy-loads children
+ }
+}
+
+/**
+ * @Entity
+ * @InheritanceType("SINGLE_TABLE")
+ * @DiscriminatorColumn(name="type", type="integer")
+ * @DiscriminatorMap({"0" = "DDC531Item", "1" = "DDC531SubItem"})
+ */
+class DDC531Item
+{
+ /**
+ * @Id
+ * @Column(type="integer")
+ * @GeneratedValue(strategy="AUTO")
+ */
+ public $id;
+
+ /**
+ * @OneToMany(targetEntity="DDC531Item", mappedBy="parent")
+ */
+ protected $children;
+
+ /**
+ * @ManyToOne(targetEntity="DDC531Item", inversedBy="children")
+ * @JoinColumn(name="parentId", referencedColumnName="id")
+ */
+ public $parent;
+
+ public function __construct()
+ {
+ $this->children = new \Doctrine\Common\Collections\ArrayCollection;
+ }
+
+ public function getParent()
+ {
+ return $this->parent;
+ }
+
+ public function getChildren()
+ {
+ return $this->children;
+ }
+}
+
+/**
+ * @Entity
+ */
+class DDC531SubItem extends DDC531Item
+{
+}
\ No newline at end of file