yin_jw 2013-12-24 03:16 采纳率: 0%
浏览 917

hibernate保存子类对象

将子类对象强制转换为父类属性,保存这个对象时,调用的是父类的hibernate配置文件还是子类的配置文件

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 16:04
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Hibernate中,如果你有一个子类继承自父类,并且你想要使用子类的实例来替换父类中的相同字段,那么你需要在子类的配置文件中指定一个映射关系。这样,当子类的对象被保存到数据库时,Hibernate就会知道如何处理这个子类对象。

    以下是一个简单的例子:

    1. 创建一个子类和父类:
    public class Parent {
        private String name;
    }
    
    public class Child extends Parent {
        private String childName;
    
        // getters and setters
    }
    
    1. 在父类的配置文件(例如hibernate.cfg.xml)中添加一个映射关系:
    <mapping>
        <class>Parent</class>
        <resultMap id="parentResultMap" type="org.example.Parent">
            <id column="id" property="name"/>
            <result column="childName" property="childName"/>
        </resultMap>
    </mapping>
    
    <mapping>
        <class>Child</class>
        <resultMap id="childResultMap" type="org.example.Child">
            <id column="id" property="childName"/>
        </resultMap>
    </mapping>
    
    1. 当创建子类的实例并将其保存到数据库时,Hibernate会自动根据父类和子类的映射关系进行转换。
    public void saveChild() {
        Child child = new Child();
        child.setName("John");
        child.setChildName("Doe");
    
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = null;
        try {
            transaction = session.beginTransaction();
            session.save(child);
            transaction.commit();
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            throw e;
        } finally {
            session.close();
        }
    }
    

    在这个例子中,当创建Child对象并将它保存到数据库时,Hibernate会首先查找父类Parent的实例,然后设置childName属性,最后返回一个新的Child对象。这样,即使你有多个Child对象,它们也可以被组合在一起存储在数据库中。

    评论

报告相同问题?