我正在嘗試爲以下情況找到最佳解決方案:我有一個必須進行代理的實體A.問題是,當我簡單地通過擴展類A來創建抽象代理將其所有行爲委託給包裝的實體時,我最終會從該實體繼承大量未使用的字段。但至少它不會改變持久性的工作方式。實體代理時的代理模式?
爲了不這樣做,我創建了一個抽象超類,它只包含抽象方法(public和protected,這就是爲什麼我沒有使用接口)並且使它成爲Entity和所有代理。這個解決方案似乎是最好的,但是它在持久性方面遇到了很多麻煩......
我想依賴我的應用程序層中的抽象超類(因爲它不區分代理A和非-proxied -A),但是然後Hibernate不會讓我 - 實體實例不能與抽象類有關係,因爲它不被持久化上下文知道。當然,我可以貶低實體類,但它擊敗了目的......
有沒有辦法讓Hibernate降低實體本身的實體?我的意思是,我可以在任何地方使用抽象類,但休眠會知道它的真正的實體類...
public abstract class AbstractA {
public abstract void doSomethingOnA();
}
@Entity
public class EntityA extends AbstractA {
@Id
private Long id;
@Column(name="column_in_a")
private SomethingA somethingA;
@Override
public void doSomethingOnA() {
somethingA.doSomething();
}
}
public class ProxiedA extends AbstractA {
private AbstractA wrappee;
@Override
public void doSomethingOnA() {
doSomethingFirst();
wrappee.doSomethingOnA();
}
}
問題是,我想使用AbstractA代替EntityA也當涉及到持久性。問題是當另一個實體聲明一個AbstractA類型的字段時,Hibernate將會失敗。我知道爲什麼,問題是如何處理它?
謝謝!
事情是我提到的那些代理不會被持久化。它們纏繞在沒有任何兄弟實體的單個實體中。請看我更新的問題。 – kboom