我在自学Hibernate,有些问题不懂想请教大家哈。
“所有的持久化类都要求有无参的构造器,因为Hibernate必须使用java的反射机制来为你创建对象”
这句话是什么意思啊。主要是不明白j“ava的反射机制”这么个名词

解决方案 »

  1.   

    就是反射。。
    JAVA基础知识
      

  2.   

    所有的持久化类都要求有无参的构造器,因为Hibernate必须使用java的反射机制来为你创建对象你要创建对象,要通过构造函数吧。hibernate不可能知道你要创建对象时需要传递哪些参数,所以就要求你必须提供一个无参的构造函数,这样就可以通过调用class.newInstance来创建对象了,然后再设置各个字段。
    不然,它怎么创建对象呢?
      

  3.   

    反射是java的基础,还是多看看基础的东西吧!
      

  4.   

    一、所有的持久化类都要求有无参的构造器持久化类:直接通过JDBC操作数据库的类,将数据增删改到数据库也是一种持久化;比如一个持久化类:public class XxxDAO{  public XxxDAO(){}
    }这个XxxDAO类必须要有一个无参数构造函数public XxxDAO(){}。二、因为Hibernate必须使用java的反射机制来为你创建对象因为Hibernate只能给你定外规则,叫你必须有这么一个无参构造,因为你其它的有参构造Hibernate根据不可能预知,而Hb可以通过以下的方式来建立这个XxxDAO类的实例。try {

    Class c = String.class;
    Constructor[] cs = c.getConstructors();
    Object obj = cs[0].newInstance(null);
    System.out.println(obj.getClass().getName());

    } catch (Exception e) {
    e.printStackTrace();
    }以上代码运行后会输出String,这就是原理
      

  5.   

    来个更形象的
    public static void main(String[] args) {
    try {

    Class c = Class.forName("java.lang.String");//因为Hibernate只知道类的包路径和类名,比如java.lang.String
    Constructor[] cs = c.getConstructors();//得到类java.lang.String的无参构造器,因为也许你有很多有参的,但是Hibernate不知道。
    Object obj = cs[0].newInstance(null);//用无参构造器(也就是构造函数)构造一下java.lang.String的实例
    System.out.println(obj.getClass().getName());//查看一下构造出来的实例是什么类(类名)

    } catch (Exception e) {
    e.printStackTrace();
    }

    }其实也许Hibernate也可以定义规则,叫你在配置文件告诉它你的有参构造器的结构,但是至少目前没有用这样的规则。所以就其原因,这还是一个规则问题。你照着用就是了。
      

  6.   

    终于懂了“java的反射机制”
    Class对象可以获取类(class)中的方法以及属性,也可以用它来创建此类的对象
    不知道这样理解对不对