美文网首页
VO的使用--解决开启了事务后hibernate自动更新对持久化

VO的使用--解决开启了事务后hibernate自动更新对持久化

作者: 猫尾草 | 来源:发表于2019-10-21 10:56 被阅读0次

1. 问题

  一个视频点播项目,视频文件可访问地址需要加签名鉴权,签名是有有效期的,所以数据库存储的是视频文件正常播放地址url,每次查询时再加上签名,返回给前端。
  数据库持久层用的是hibernate,service上面加了事务@Transactional。“在一个事务里,如果你更新了持久化对象的某个字段,即使你没有显式的调用session.update(obj),
Hibernate的事物管理器也会自动帮你去更新这个对象”。即,我们每次给url加上签名后,就会自动更新到数据库里面,我们不希望这样,每次都多一个无谓的数据库操作,浪费资源。
  解决办法,可以是去掉事务,或者事务标记为只读,但这不是根本解决办法。这个方法确实只有读数据库操作,没必要加事务,但是我们不能保证其他方法也都不需要事务。
  另外还遇到像数据库存储地址区域代码,返回给前端需要转换为中文名称等,都是一样的问题。

2. 解决办法:创建VO对象

  其他的还有DTO等等,这里用不到,不去解释,有兴趣可以去搜。VO的意思就是展示层使用的对象。通常从数据库查询出的记录,前端展示的时候并不需要所有字段,有的字段还需要修改才能展示,所以我们可以不去修改从数据库读取出来的持久化对象,而是按照需要取出需要的数据包装成一个VO去返回给前端。

3. 应该尽量使用VO

  即使不存在上面的问题,比如你使用MyBatis而不用Hibernate,也应该使用VO,因为把数据库查询出的所有字段不管不顾直接返回给前端,确实不是一个好的做法。

相关文章

  • 二、加深理解Hibernate框架

    Hibernate_缓存&事务&批量查询概述 一、 Hibernate的持久化类 持久化类是指一个Java类和数据...

  • Spring restful中报错No serializer f

    使用Spring restful返回持久化的json对象,由于使用了hibernate,所以报错: 解决方法是将h...

  • 五、Spring 访问数据库

    在开发持久层的时候,我们可以使用JDBC、Hibernate、Java持久化API、Mybatis等任意的持久化框...

  • JAVAEE框架学习——Hibernate——持久化

    Hibernate持久化类的编写规则 持久化类 Hibernate是持久层的ORM映射框架,专注于数据的持久化操作...

  • Hibernate学习(二)

    目录 Hibernate的持久化类介绍Hibernate持久化对象的状态Hibernate的一级缓存Hiberna...

  • hibernate

    介绍 hibernate配置文件说明 基本使用代码一 基本使用代码二 API 持久化类的状态 Hibernate的...

  • Hibernate体系结构

    Hibernate架构包括许多对象持久对象,会话工厂,事务工厂,连接工厂,会话,事务等。 hibernate架构中...

  • 7-1

    Hibernate体系结构图 Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象) ...

  • hibernate体系结构

    Hibernate包括很多对象持久对象,会话工厂、事务工厂、链接工厂、会话、事务等。Hibernate中有4层:J...

  • hibernate3

    1持久类三种状态 oid Hibernate缓存 一级缓存session 持久态自动更新数据库

网友评论

      本文标题:VO的使用--解决开启了事务后hibernate自动更新对持久化

      本文链接:https://www.haomeiwen.com/subject/pbtqvctx.html