`
徜徉の小溪
  • 浏览: 448674 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

getHibernateTemplate.load() 和get()之间的区别

阅读更多

今天我在hibernate 进行 getHibernateTempelete().delete(entity) 数据的时候

抛出了一个异常,异常信息是空值引用了一个非空值,意思就是说在删除数据的时候ORM进行Mapping   映射时,将一个空值插入到了一个标识为不能为空的属性中. 

 

经过一段仔细的研究后发现hibernate 在进行delete,update 操作的时候,必须将传入的一个持久化Pojo对象,new 的对象是不行的,

 

需要在delete,update 时 加载持久化对象,所以我在加载的时候 ,选用了getHibernateTempelete.get(Entity.class,id)来获取这一持久对象.

后来有人说需要在update,delete操作时推荐使用load(Entity.class,id) 方法.加载持久化对象,这样可以在你缓存中读取数据.

 

    这里我搜了一点资料,是关于

getHibernateTempelete.get(Entity.class,id)和getHibernateTempelete.load(Entity.class,id) 的区别

 

 

1. getHibernateTemplate.load() 和get()之间的区别
主要的地方:
getHibernateTemplate.load() 存在延迟加载问题。
getHibernateTemplate.get() 不存在此问题,不采用lazy机制的。
1 当记录不存在时候,get方法返回null,load方法产生异常,即get()可以取空的数据集,但load()不行。  
       take a look at the Hibernate documentation (though I agree is not very explicit)--the HibernateTemplate is basically a wrapper around the native Hibernate API.
       get() will return null if an object is not found while load() will always return a   non-null object which is a proxy. If the underlying object does not exist, the proxy will thrown ObjectNotFoundException.
       load() should be used when you are sure that the object exits while get() when
you're not.
2 load方法可以返回实体的代理类,get方法则返回真是的实体类
3 load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get方法仅仅在内部缓存中
进行数据查找,如果没有发现数据則将越过二级缓存,直接调用SQL查询数据库。
4 也许别人把数据库中的数据修改了,load如何在缓存中找到了数据,则不会再访问数据库,而get则
会返回最新数据。

2
0
分享到:
评论

相关推荐

    Spring与Hibernate相结合的实例

    return this.getHibernateTemplate().loadAll(Student.class); } } ``` `StudentDaoImpl`实现了`StudentDao`接口中的方法,并利用Spring的`HibernateDaoSupport`类来进行数据访问操作。 #### 四、总结 通过上述...

    hibernateTemplate和HibernateDaoSupport

    List result = getHibernateTemplate().loadAll(clazz); getHibernateTemplate().deleteAll(result); } } ``` 综上所述,hibernateTemplate 和 HibernateDaoSupport 是 Spring 集成 Hibernate 的关键组件,它们...

    hibernateTemplate

    Object person = getHibernateTemplate().load(Person.class, personId); getHibernateTemplate().delete(person); } } ``` #### 五、总结 `HibernateTemplate`是Spring框架中一个非常强大的工具,它简化了...

    SSH常见面试题文库.pdf

    4. load() 和 get() 的区别 load() 和 get() 是 Hibernate 中的两个常用的方法,用于从数据库中检索数据。load() 方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载;get() 方法一定要获取到真实的...

    这是本人写的论坛系统知识总结

    List l = getHibernateTemplate().find(LOAD_BY_USERNAME, username); // 通过邮箱查询用户信息 List l = getHibernateTemplate().find(LOAD_BY_EMAIL, email); // 通过密码查询用户信息 List l = ...

    HibernateTemplate的用法总结

    Object person = getHibernateTemplate().load(Person.class, new Integer(personId)); // 删除Person对象 getHibernateTemplate().delete(person); } } ``` #### 四、应用场景 - **快速开发**:由于...

    ssh(structs,spring,hibernate)框架中的上传下载

     我们前面已经指出Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对...

    spring_MVC源码

    15. <load-on-startup>1</load-on-startup> 16. </servlet> 17. <servlet-mapping> 18. <servlet-name>spring</servlet-name> <!-- 这里在配成spring,下边也要写一个名为spring-servlet.xml的文件,主要用来...

    spring 事务配置

    OrderList orderList = (OrderList) getHibernateTemplate().load(OrderList.class, orderId); lineItem.setOrderList(orderList); getHibernateTemplate().saveOrUpdate(lineItem); getHibernateTemplate()....

    SSH2增删改查使用HibernateTemplate

    此外,HibernateTemplate还提供了`load()`、`execute()`等方法,以适应不同的业务需求。在实际开发中,为了事务的一致性,通常会将这些操作包裹在`@Transactional`注解的方法中,确保数据库操作的原子性和一致性。 ...

    SSH面试总结(非常全)

    Hibernate的load()与get()方法的区别** `load()`和`get()`方法都用于从数据库加载实体,但它们在异常处理上有所不同。`load()`默认抛出`ObjectNotFoundException`异常,当实体不存在时,而`get()`方法则返回`null`...

    java程序员ssh面试常见题

    - **知识点概述**:load()与get()都是Hibernate提供的用于加载实体的方法,但它们之间存在一些重要区别。 - **详细解释**: - **load()**:尝试性加载实体,如果实体不存在则抛出`ObjectNotFoundException`异常。 ...

Global site tag (gtag.js) - Google Analytics