xf7633 2012-09-04 14:01
浏览 266
已采纳

hibernate HibernateTemplate源码疑问

为什么hibernate的HibernateTemplate的涉及到操作持久化对象的方法,或者说是用到HibernateCallback匿名内部类的方法,如get、delete、save等里面都会有如下代码
[code="java"]
final HibernateTemplate this$0;
private final LockMode val$lockMode;
private final Class val$entityClass;
private final Serializable val$id;

        {
            this$0 = HibernateTemplate.this;
            lockMode = lockmode;
            entityClass = class1;
            id = serializable;
            super();
        }

[/code]

为什么要这么写?有什么作用?

  • 写回答

2条回答 默认 最新

  • jinnianshilongnian 2012-09-04 17:28
    关注

    以hibernate3 Template为例子;
    首先你的代码是反编译的,建议去看spring源码,而不是这个代码;

    this$0 = HibernateTemplate.this; //这个就是代表tthis指针; 栈区的第0个就是存的this引用;

    Spring提供了一只的DAO抽象:如下所示:
    Callback:定义可变行为,即不可预知行为(命令设计模式)
    Template:提供模板支持,简化开发
    Support:提供对Template的支持,提供一组简便方法,并提供获取Template的方法

    在Template定义一些可以模板方法save、update、delete、find;
    一些可变操作,如分页查询 必须通过HibernateCallback 回调完成;即HibernateCallback提供给我们一个插入点,在这个点可以实现一些非模板能完成的功能。
    [code="java"]
    public Serializable save(final Object entity) throws DataAccessException {
    return executeWithNativeSession(new HibernateCallback() {
    public Serializable doInHibernate(Session session) throws HibernateException {
    checkWriteOperationAllowed(session);
    return session.save(entity);
    }
    });
    }

    public Serializable save(final String entityName, final Object entity) throws DataAccessException {
        return executeWithNativeSession(new HibernateCallback<Serializable>() {
            public Serializable doInHibernate(Session session) throws HibernateException {
                checkWriteOperationAllowed(session);
                return session.save(entityName, entity);
            }
        });
    }[/code]
    

    摘了两个方法,不懂的可以问我,其实内部还是通过callback完成的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题