Ok trouvé la solution :
/**
* User
*
* @ORM\Table("users")
* @ORM\Entity
*/
class User extends UserEntity
{
...
/**
* @ORM\OneToOne
* (
* targetEntity="UserPreferences",
* cascade={"persist", "remove"},
* inversedBy="user"
* )
*/
protected $userPreferences;
}
/**
* @ORM\Table("user_preferences")
* @ORM\Entity
*/
class UserPreferences extends UserPreferencesEntity
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
protected $id;
/**
* @var int
*
* @ORM\OneToOne(targetEntity="User", mappedBy="id", cascade={"persist", "remove"})
*/
protected $user;
...
}
Tout d'abord, j'ai dû spécifier mappedBy et inversedBy (que j'ai déjà essayé auparavant mais dans le mauvais sens - mappedBy du côté propriétaire, inversedBy du côté inversé). De plus, j'ai pensé que le côté inversé n'avait pas besoin d'avoir un identifiant séparé et j'ai essayé d'utiliser l'identifiant du côté propriétaire (User#id) comme clé primaire pour celui-ci également.
- http://docs.doctrine-project. org/en/latest/reference/unitofwork-associations.html
- http://docs.doctrine-project. org/en/latest/reference/association-mapping.html