2012-03-27 71 views
1
我使用学说2

和单表继承原则2关联继承,我最顶层的实体层次是:不同类别

JS_File --> [one to many] --> JS_File_Version 

然后我的子类实体层次是:

JS_Image (extends JS_File) --> [one to many] --> JS_Image_Version (extends JS_File_Version) 

继承映射完全适用于JS_File和JS_Image和关联映射完全适用于JS_File - > JS_File_Version。但是,当涉及到地图上JS_Image的“版本”协会获得:

'Property "versions" in "JS_Image" was already declared, but it must be declared only once' 

我明白这是为什么,该协会正在从JS_File继承,我不能覆盖它,但我要如何实现我在做什么?基本上,继承,我怎么能告诉学说使用不同的targetEntity的子类关联。

回答

1

看起来像什么,我试图做是不可能的(同时具有JS_File和JS_Image作为具体的实体)。我遵循了来自教条用户邮件列表的人的建议,而不是:

我解决这个问题的方法是使用抽象基类,然后定义子类上的实际映射。例如,你可以这样做:

JS_AbstractFile与子类:JS_File和JS_Image JS_AbstractVersion与子类:JS_FileVersion和JS_ImageVersion

AbstractFile和AbstractVersion可以定义属性(和getter/setter方法),但你不应该定义该字段的任何映射信息。然后在你的子类,你的映射信息一起重新定义属性(至少,这就是我是如何做的,因为我用的注解)

http://groups.google.com/group/doctrine-user/msg/243f355191d3a512

2

也许你正在寻找的是@MappedSuperclass注释您JS_Image实体。

我觉得我前一段时间使用,但根据文档它可以让你“定义状态和映射信息是共同的多个实体类”,也可以“出现在中间否则映射的继承层次“

也许你可以用它来告诉学说看你JS_Image实体为您子实体实际的“父”实体。现在还没有时间来测试,所以请让我知道它是否有帮助。

+0

谢谢你的建议,它看起来像什么,我试图要做是不可能的。我已经决定采用不同的方法(请参阅其他答案),我认为这与此类似。 – 2012-03-29 09:40:12