我正在尝试为以下情况找到最佳解决方案:我有一个必须进行代理的实体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