hibernate 3中的update方法有个重载
update(Object obje);
update(String s,Object obj);
我在调用update的时候发现了这个重载。
谁能解释下update(String s,Object obj);
这个方法的2个参数什么意思?谢谢!

解决方案 »

  1.   

    正常情况下,update方法只用一个参数的就可以了。
    但是有2个参数的版本也是有意义的。它的完整声明是这样的。
    public void update(String entityName, Object object) throws HibernateException;
    hibernate在探索不使用pojo类或javabean进行O/R Mapping,可选的方式有 动态模型(Dynamic models),和 XML映射。两种方式都可以不写持久化类的。前者使用Map套Map来表示数据,后者使用解析过的XML树。
    <hibernate-mapping>的<class>节点有个可选属性是entity-name,默认是类名。普通的用pojo类映射时,它是没什么用的。但是在上述两种情况下,就要使用它了(配置文件的其他区别不赘述)。在你持久化操作这样的映射时,所使用的Session的EntityMode不能再是默认的POJO,而是MAP或XML。调用Session的持久化方法也必须指定entityName,因为你要持久化的对象已经不能以自身的信息(object.getClass())来表示映射的对象。你可以发现不只是update,其他一系列的方法,像get load save saveOrUpdate merge persist等等都提供了带entityName的版本。
    我不清楚hibernate最新版本对这种映射的支持,但至少在3.0版本时,这些特性还处于实验阶段,不建议使用。说了这么多,其实一句话。无视它们就好了。
      

  2.   

    顺带再说一句,你调用的单参数的update方法,内部调用了2个参数的方法,entityName传了null。get load save 等方法也是这样做的。