2012-03-27 119 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