Spring + Hibernate 项目中,查询POJO的时候调用 set方法 会将对应字段修改到数据库里面

问题描述

下面是配置,求解答如public Student querySutdent(id){ Student stu = XXDao.getStudent(id); stu.setSex("男"); return stu;}会将 stu的 sex 更新数据库里面 <!-- Enable @Transactional support --> <tx:annotation-driven/> <!-- Enable @AspectJ support --> <aop:aspectj-autoproxy/> <!-- Activates scanning of @Autowired --> <context:annotation-config/> <!-- Activates scanning of @service --> <context:component-scan base-package="com.chinadrtv.erp.tc;com.chinadrtv.erp.shipment;com.chinadrtv.erp.ic"/> <tx:advice id="txAdvice"> <tx:attributes> <!-- Read-only commented out to make things easier for end-users --> <tx:method name="build*" read-only="true" propagation="REQUIRED" rollback-for="Throwable"/> <tx:method name="get*" read-only="true" propagation="REQUIRED" rollback-for="Throwable"/> <tx:method name="calculate*" read-only="true" propagation="REQUIRED" rollback-for="Throwable"/> <tx:method name="*" propagation="REQUIRED" rollback-for="Throwable"/> </tx:attributes> </tx:advice> <!-- =================================================================== --> <!-- AOP: Configuration and Aspects --> <!-- =================================================================== --> <aop:config> <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Service.*(..))" order="0"/> <aop:advisor id="auditLogTx" advice-ref="txAdvice" pointcut="execution(* *..aop.*Service.*(..))" order="1"/> </aop:config>

解决方案

把查询方法设置为只读 即可
解决方案二:
stu.setSex("男"); 】你删除这段代码不就可以了?
解决方案三:
read-only="true"
解决方案四:
Hibernate的基础问题。因为你的hibernate的对象有4种状态你通过hibernate的get拿到的 stu对象。那么这个stu是被纳入session的管理的,当你修改了其属性以后。hibernate在commit的时候会自动对比对象的属性是否变化。如果变化了就会update如果不想纳入session的管理。调用session.evict(object) 将stu逐出session的管理即可

时间: 2024-10-31 00:52:48

Spring + Hibernate 项目中,查询POJO的时候调用 set方法 会将对应字段修改到数据库里面的相关文章

在Spring Boot项目中使用Spock框架

Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring Boot项目中使用该框架写优雅.高效以及DSL化的测试用例.Spock通过@RunWith注解与JUnit框架协同使用,另外,Spock也可以和Mockito(Spring Boot应用的测试--Mockito)协同使用. 在这个小节中我们会利用Spock.Mockito一起编写一些测试用例(包括对Controller的测试和对Repository的测试),感受下Spock的使用.

线程-spring+netty项目中使用NIO的技术

问题描述 spring+netty项目中使用NIO的技术 在做一个springmvc+netty的项目,要求当请求进到方法正常返回一个成功的同时另一条线程处理后台的业务,后台业务在处理的同时其实这个会话已经正常返回了. @RequestMapping(value = "/static/o_index.do",method={RequestMethod.POST,RequestMethod.GET}) public void indexSubmit(HttpServletRequest

javascript-JavaScript中Math对象为什么可以调用apply()方法?

问题描述 JavaScript中Math对象为什么可以调用apply()方法? 按照我的理解apply方法是Function对象的原型属性上的方法. 所以不是应该只有Function构造函数构造出来的对象才可以调用Function的apply方法吗? 为什么JS的内置对象Math可以像Math.min.apply(null,array)这个样子的调用apply方法? 解决方案 因为在JS中,如果没有显示指定protype,那么对象默认的protype是Object对象的实例,一般常用的方法都定义

【redis】5.spring boot项目中,直接在spring data jpa的Repository层使用redis +redis注解@Cacheable直接在Repository层使用,报错问题处理Null key returned for cache operation

spring boot整合redis:http://www.cnblogs.com/sxdcgaq8080/p/8028970.html 首先,明确一下问题的场景 之前在spring boot整合redis,关于redis的使用都是在repository层上再封装一层service层,在service层上使用的. 现在如果直接将redis的注解放在repository上使用,是个什么情况呢? 代码如下: 1.首先我有一个实体XxAdmin,主键为id 2.Xxadmin我写了一个AdminRep

spring boot项目中处理Schedule定时任务

默认,springboot已经支持了定时任务Schedule模块,所以一般情况已经完全能够满足我们的实际需求,一般来说,没有必要在加入其他类似于:quartz 另外,在这里提一个实际项目中,关于定时任务的架构上的一些考虑: 一般来说,实际项目中,为了提高服务的响应能力,我们一般会通过负载均衡的方式,或者反向代理多个节点的方式来进行.通俗点来说,我们一般会将项目部署多实例,或者说部署多份,每个实例不同的启动端口.但是每个实例的代码其实都是一样的.如果我们将定时任务写在我们的项目中,就会面临一个麻烦

spring boot项目中使用jpa的一个未解之谜

公司最近主要的工作就是把之前的一个项目进行几乎全面的重构,之所以说几乎全面,是因为除开业务逻辑外全部换血: 框架由spring+struts2+mybatis改为spring boot+jpa 数据库由sybase+h2改为oracle+redis 子系统之间的交互由activemq改为http 代码具体实现全部重写 对一个运行了若干年的项目进行这样的大动作,路程无疑是漫长而复杂的.在进行了一系列设计文档的编写.评审.修订.再评审之后,终于可以开始码代码了. 本以为码代码终于可以松一口气,没想到

spring mvc 项目中session数据相关

问题描述 用spring mvc开发的项目,发布到外网服务器时,将A用户登录的信息存放在session中,B用户访问时怎么可以取到session中A用户的信息?其中我的controller注解scope是 @Scope("session"),为什么会出现这个情况呢?有大侠能解答一下吗?谢谢.对了,我发布的服务是在微信端使用的.但用两部手机访问就出现了如上的问题,是什么原因呢? 解决方案 http://blog.csdn.net/mastermind/article/details/19

项目中通过js动态创建层的方法为表单添加错误提示

本文介绍利用动态创建层技术实现无冗余代码为表单自动添加错误提示的方法. 项目中表单输入检测是基本必定会碰到的,本文提供一种方法通过js动态创建层的方法为表单添加错误提示.该代码在IE6和firefox3.5中测试通过. 动态创建层的代码: function createDiv(msg) { //create a new empty p var str = document.createElement("p"); str.id = "newp"; //p ID str

ssh 项目中,如何可以通过调用id得到一个字段的字

问题描述 我想得到的效果就是--------"[新闻分类]新闻标题"我的代码<logic:presentname="all6"scope="request">logic:iterateid="news6"scope="request"name="all6"length="9"offset="0">[${news6.subitem]