我正在使用D2实现继承映射,采用类表继承策略。我有一个名为Person的父类,代码块如下:
namespace Zain\Entity;
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="Specialty", type="string") // what other types exist?
* @DiscriminatorMap({"person" = "\Zain\Person", "employee" = "\Staff\Entities\Employee"})
*
* @Table(name="db_One.tblPerson")
*
*/
class Person
{
...
我是一位有用的助手,可以为您翻译以下内容。
我有一个名为员工的子类,其代码如下:
namespace Staff\Entities;
/**
* Description of Employee
* @Entity
* @Table(name="db_Two.tblEmployee")
*
*/
class Employee extends \Zain\Entity\Person
{
...
MySQL表tblPerson有一个称为Specialty的判别列,其定义如下:
`Specialty` varchar(45) NOT NULL
问题发生在我有一个员工实例并尝试将其持久化时。
当员工实例被持久化时,我期望对象名称employee(字符串)会保存在表Person的Specialty列中。然而,这并没有发生。我遇到了一个错误信息:
Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'specialty' cannot be null
我明白这个错误的意思是在EntityManager生成和使用的SQL语句中,没有传递Specialty列的任何值。而且我在tblPerson > Specialty列上设置了NotNull约束。
如果我删除NotNull约束,则可以使其正常工作 - 但这并不符合目的。在帮助解决问题时,您能否请告诉我如何检索persist调用期间实体管理器使用/将要使用的生成的SQL语句?
在经过几天的寻找答案后,有一个好的结局会很棒。再次感谢。