Ok, đã tìm ra giải pháp:
/**
* 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;
...
}
Trước hết, tôi phải chỉ định mappedBy và inversedBy (mà tôi đã thử trước đó nhưng sai hướng - mappedBy ở phía sở hữu, inversedBy ở phía nghịch đảo). Ngoài ra, tôi nghĩ rằng phía đảo ngược không cần phải có id riêng và tôi đã cố gắng sử dụng id của phía sở hữu (User # id) làm khóa chính cho bên này.
- http://docs.doctrine-project. org / en / new / reference / unitofwork-integration.html
- http://docs.doctrine-project. org / en / new / reference / Association-mapping.html