1

我不太擅长提问,但下面的代码应该是不言自明的。我需要创建一个从类到不是实体的实体超类的 OneToOne 关联。

/* Not an entity */
class Superclass {
      /** 
       *@Id @Column(name="entity_id", type="integer") @GeneratedValue 
       **/
      protected $id;
}

/**
 * @Entity @Table(name="subclasses1")
 **/
class Subclass1 extends Superclass {

}

/**
 * @Entity @Table(name="subclasses2")
 **/
class Subclass2 extends Superclass {

}


/**
 * @Entity @Table(name="assoc")
 **/
class Associationclass
{
    /**
     *OneToOne(targetEntity="Superclass")
     **/
    protected $association;

    /**
     *@Column(type="string")
     **/
    protected $info;
}

问题是:如何使用 OneToOne 关系同时引用 subclass1 和 subclass2 而不使超类成为实体(创建新表并使用鉴别器)?

4

1 回答 1

1

你不能。如果你想要那种继承(你可以在关联中使用的那种),你需要在学说中对继承建模。

关联需要一个“targetEntity”——正如名称所示,它必须是一个实体。

除非有很好的理由不这样做,否则请继续将您的超类设置为实体,并以教义可以理解的方式设置继承。

您的超类需要成为实体的原因是因为超类及其子类将共享一个标识符。因此,有了标识符(和鉴别器),教义就可以确定 SuperClass#1234 实际上是 SubClass2。

于 2012-05-11T05:16:16.910 回答