DDC-922: Persisting an entity with an 1:n collection of related entites fails if the FK ist part of a composite PK #1147

Closed
opened 2026-01-22 13:03:43 +01:00 by admin · 5 comments
Owner

Originally created by @doctrinebot on GitHub (Dec 9, 2010).

Originally assigned to: @beberlei on GitHub.

Jira issue originally created by user branleb:

If you got two Entities A and B where A is a sample Entity with a 1:n relation to the Entity B
and B has a composite PK with the FK (A id) and a custom field like this:

EntityA:
  type: entity
  table: entity_a
  repositoryClass: EntityARepository
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    handle:
      type: string
      length: 32
      unique: true
 oneToMany:
    entites_b:
      targetEntity: EntityB
      mappedBy: entity_a
      cascade: [persist]
EntityB:
  type: entity
  table: entity_b
  repositoryClass: EntityBRepository
  id:
    description:
      type: string
      length: 255
      notnull: true
      generator:
        strategy: NONE
    entitiy*a*id:
      type: integer
      length: 11
      notnull: true
      generator:
        strategy: NONE
  fields:
    value:
      type: string
      length: 255
  manyToOne:
    entitiy_a:
      targetEntity: EntitiyA
      inversedBy: entities_b
Class EntityA
{
    private $id;

    private $handle;

    private $b_coll;

    public function addB(EntityB $ent) 
    {
        $this->b_coll->add($ent);
        $b->setA($this);
    }
}
Class EntityB
{
    private $description;
    private $entity*a*id;

    private $value;

    private $entity_a;

    public function setA(EntityA $ent)
    {
        $this->entity_a = $ent;
    }
}

If you try to persist an object of A holding one or more references to objects of B, the objects get correctly persistet. This means, that every inserted record of B has a correctly filled field "entity_a_id". The objects of B also have a correct reference to A holding now the new A record with its autoinc id.
But the object property "entity_a_id" stays empty. This leads to a collection of unusable EntityB objects (in memory), since on another persist of EntityA the values of entity_a_id are still not set correctly but the state is managed which leads to an "update B ... where entity_a_id=0"
We've tried to set the entity_a_id with an event handler on postPersist. On a persist of EntityA the collection entities wanted to update their entity_a_ids from 0 to the correct one.

Originally created by @doctrinebot on GitHub (Dec 9, 2010). Originally assigned to: @beberlei on GitHub. Jira issue originally created by user branleb: If you got two Entities A and B where A is a sample Entity with a 1:n relation to the Entity B and B has a composite PK with the FK (A id) and a custom field like this: ``` EntityA: type: entity table: entity_a repositoryClass: EntityARepository id: id: type: integer generator: strategy: AUTO fields: handle: type: string length: 32 unique: true oneToMany: entites_b: targetEntity: EntityB mappedBy: entity_a cascade: [persist] ``` ``` EntityB: type: entity table: entity_b repositoryClass: EntityBRepository id: description: type: string length: 255 notnull: true generator: strategy: NONE entitiy*a*id: type: integer length: 11 notnull: true generator: strategy: NONE fields: value: type: string length: 255 manyToOne: entitiy_a: targetEntity: EntitiyA inversedBy: entities_b ``` ``` Class EntityA { private $id; private $handle; private $b_coll; public function addB(EntityB $ent) { $this->b_coll->add($ent); $b->setA($this); } } ``` ``` Class EntityB { private $description; private $entity*a*id; private $value; private $entity_a; public function setA(EntityA $ent) { $this->entity_a = $ent; } } ``` If you try to persist an object of A holding one or more references to objects of B, the objects get correctly persistet. This means, that every inserted record of B has a correctly filled field "entity_a_id". The objects of B also have a correct reference to A holding now the new A record with its autoinc id. But the object property "entity_a_id" stays empty. This leads to a collection of unusable EntityB objects (in memory), since on another persist of EntityA the values of entity_a_id are still not set correctly but the state is managed which leads to an "update B ... where entity_a_id=0" We've tried to set the entity_a_id with an event handler on postPersist. On a persist of EntityA the collection entities wanted to update their entity_a_ids from 0 to the correct one.
admin closed this issue 2026-01-22 13:03:44 +01:00
Author
Owner

@doctrinebot commented on GitHub (Dec 10, 2010):

Comment created by @beberlei:

Fixed formating

@doctrinebot commented on GitHub (Dec 10, 2010): Comment created by @beberlei: Fixed formating
Author
Owner

@doctrinebot commented on GitHub (Dec 10, 2010):

Comment created by @beberlei:

When dealing with foreign keys as composite keys you are currently forced to make use of the "Assigned Id Generator".

This means you have to make sure the IDs are set to their values before calling ->persist().

@doctrinebot commented on GitHub (Dec 10, 2010): Comment created by @beberlei: When dealing with foreign keys as composite keys you are currently forced to make use of the "Assigned Id Generator". This means you have to make sure the IDs are set to their values before calling ->persist().
Author
Owner

@doctrinebot commented on GitHub (Dec 10, 2010):

Comment created by @beberlei:

This issue will be fixed when DDC-117 is merged into master. That will happen for the 2.1 release.

@doctrinebot commented on GitHub (Dec 10, 2010): Comment created by @beberlei: This issue will be fixed when [DDC-117](http://www.doctrine-project.org/jira/browse/DDC-117) is merged into master. That will happen for the 2.1 release.
Author
Owner

@doctrinebot commented on GitHub (Jan 2, 2011):

Comment created by @beberlei:

Implemented

@doctrinebot commented on GitHub (Jan 2, 2011): Comment created by @beberlei: Implemented
Author
Owner

@doctrinebot commented on GitHub (Jan 2, 2011):

Issue was closed with resolution "Fixed"

@doctrinebot commented on GitHub (Jan 2, 2011): Issue was closed with resolution "Fixed"
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: doctrine/archived-orm#1147