Java 如何将子类的实例传递给超类

Java 如何将子类的实例传递给超类,java,hibernate,inheritance,polymorphism,Java,Hibernate,Inheritance,Polymorphism,我有一个像超类1->子类1->子类2这样的3层固有实体。我正在使用hiberate创建这个项目,其基本思想是,在持久化数据时,我希望在超类1级别执行它。因此,任何扩展该超类的人都可以通过调用一个方法将任何数据持久化到相应的表中 我这样做的主要目的是为了有一种事件计时,我可以随时覆盖它。是这样的: 这使得我的所有模型在更高的层次上执行我需要的功能 public class interfaces SuperModifier() { Boolean save(); void bef

我有一个像超类1->子类1->子类2这样的3层固有实体。我正在使用hiberate创建这个项目,其基本思想是,在持久化数据时,我希望在超类1级别执行它。因此,任何扩展该超类的人都可以通过调用一个方法将任何数据持久化到相应的表中

我这样做的主要目的是为了有一种事件计时,我可以随时覆盖它。是这样的:

这使得我的所有模型在更高的层次上执行我需要的功能

public class interfaces SuperModifier() {

    Boolean save();

    void beforeSave();

    void afterSave();

    void delete();
}
这实现了接口类。执行save和其他iplemetned函数。我对会话部分已经很在行了,而且我已经能够保存数据了。我只是在增强代码的可伸缩性和可重用性

public class Superclass implements SuperModifier{

    Object newInstance;

    public Boolean save() {

        try {

            Session session = HibernateSessionFactory.getSessionFactory().openSession();
            Transaction transaction = session.beginTransaction();
            session.save(newInstance); <-- this part rigth here
            transaction.commit();

        } catch (Exception e) {
          // TODO: handle exception
           e.printStackTrace();
           transaction.rollback();
        }
    }

    ....
}
这个类是我的setter和getter所在的位置。以及此型号可能需要的其他功能

public class Subclass2 extends Subclass1() {


    // I placed all functions here like setters and getters
}
当然还有主要功能

public static void main(String args[]) {

    Subclass2 sub = new Subclass2();
    sub.setName("New Instance");
    sub.save(); // <--called because of the superclass
}
您可以看到session.savenewInstance行;newInstance变量正是我遇到的问题。如何传递在main方法中创建的实例以保存在其超类中

我想通过构造函数传递它,但这是不可能的,因为它还没有创建。我还想在超类中创建一个setter来设置newInstance,但是我什么时候执行这个集合呢

我也在想sub.savesub;,但它只是看起来不对


有什么想法吗?我希望你明白我的意思。我的结构错了吗?如果是,有什么建议吗?

将实体与持久化逻辑混合并不是一个好主意,因为:

您无法正确控制事务边界。您的save方法假定没有正在进行的事务,因此它会尝试创建一个事务边界 实体类依赖于Hibernate API类,因此如果要将它们导出到UI层,UI也需要依赖于Hibernate。 尝试在服务层中分离持久化逻辑


至于你的问题,子类实体也是一个超类实体,所以你只需要保存它一次。

我将首先关注这一点,然后进一步增强它。无论如何,save函数存在并且由于超类而被调用。在创建的instance sub.save上,它尚未真正保存,因为它仍将进入超类的save函数中,因为它未被重写。现在,一旦进入,问题是session.savenewInstance,我不知道如何传递newInstance变量,它是主函数中创建的实例,sub.超类newInstance是一个实例属性,您的保存方法可能无论如何都应该保存此引用。否,因为首先newInstance变量尚未声明为值或在任何点实例化。它可能被声明为超类上的全局变量,但就是这样,还没有值。或者你是说我应该做一些像session.savethis这样的事情;而是?除了session.savethis之外的任何内容;听起来更糟。对不起,我不明白你想说什么来解决我的问题。你能详细说明一下,把事情弄清楚吗?非常感谢。
public static void main(String args[]) {

    Subclass2 sub = new Subclass2();
    sub.setName("New Instance");
    sub.save(); // <--called because of the superclass
}