Hibernate没有arg构造函数

Cha*_*nya 2 java hibernate

我正在浏览hibernate文档,文档说hibernate需要一个no-arg构造函数用于所有持久化类:

无参数构造函数是所有持久化类的要求; Hibernate必须使用Java Reflection为您创建对象.构造函数可以是私有的,但是运行时代理生成和无需字节码检测的高效数据检索需要包或公共可见性.

但是当我通过创建一个没有任何no-arg构造函数的POJO类并通过放置一个带参数的构造函数来创建一个用于测试的示例程序时,我希望Hibernate会抛出一个异常,但我很惊讶地看到我没有得到异常.

这是我的POJO:

public class Event {
    private Long id;

    private String title;

    public Event(String title) {}

    public Long getId() {
        return id;
    }

    private void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的计划:

import org.hibernate.Session;
import java.util.*;
import org.hibernate.tutorial.domain.Event;
import org.hibernate.tutorial.util.HibernateUtil;

public class EventManager {
    public static void main(String[] args) {
        EventManager mgr = new EventManager();
        mgr.createAndStoreEvent("My Event", new Date());
        HibernateUtil.getSessionFactory().close();
    }

    private void createAndStoreEvent(String title, Date theDate) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Event theEvent = new Event("");
        theEvent.setTitle(title);
        theEvent.setDate(theDate);
        session.save(theEvent);
        session.getTransaction().commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

我还配置了hibernate配置和映射文件.现在,我可以看到执行此程序时,我的数据库中存储了一条新记录.

我是Hibernate的新手,请帮助我理解hibernate文档中给出的语句,因为文档说我们需要一个no-arg构造函数.我正在使用Hibernate 3.x版本.

Ale*_*exR 6

尝试阅读您的活动,您将看到异常.

当通过显式调用构造函数创建了对象时,问题不在于保存数据库中的对象.问题是当hibernate从DB读取记录并且必须创建映射类的相应对象时.在这种情况下,它应该创建对象.没有默认构造函数,怎么做呢?确实可以有几个带参数的构造函数,它"不知道"要采用哪一个.

所以它做了这样的事情:

Object obj = Class.forName(mappedClassName).newInstance();
pupulateProperties(obj);
Run Code Online (Sandbox Code Playgroud)

newInstance() 需要no-args构造函数.