1. 程式人生 > >Hibernate執行查詢後會引發update操作並報錯的解決方法

Hibernate執行查詢後會引發update操作並報錯的解決方法

剛剛發現一個bug,就是在執行了匯出資料庫中的資料到excel表格後再去執行查詢操作會報錯,通過將
 <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
        <property name="hibernate.show_sql">false</property>
        <property name="javax.persistence.validation.mode">none</property>

hibernate.show_sql語句屬性改為false檢視列印的語句發現select語句後又執行了update語句,因此查了些資料並結合程式碼找到了原因,

因為在執行匯出操作時,會對查詢出來的持久化狀態的物件進行set賦值操作,如下:

list = ps.queryProgram(condition, scrollPage);
if(mediastatus !=null && "0".equals(mediastatus)){
	list.get(i).setMediastatus(config.getMediastatus0());
				}

由於查詢出來的物件的屬性被重新賦值了,和資料庫的值不對應;導致hibernate判斷查詢出來的物件發生了變化,因此自動執行了更新操作,操作會更新到資料庫,但由於新欄位的值位數超過了資料庫對應列的大小限制,因此報錯了
 “ORA-12899: value too large for column "WACOS"."PROGRAM"."STATUS" (actual: 9, maximum: 1)”

所以,我在查詢出結果後再重新複製了一份查詢結果物件然後對複製後的物件執行了set操作,這樣就避免了直接對查詢出的物件進行set操作而引起Hibernate會執行更新操作的問題。
list = ps.queryProgram(condition, scrollPage);
//為了避免查詢出的program物件在set操作後會自動更新,所以重新複製了一份查詢出的物件!
List<Program> newlist = new ArrayList<Program>(list.size());
	for(Program program : list){
	Program program2 = new Program();
	BeanUtils.copyProperties(program2, program);
	newlist.add(program2);
			}
	list = newlist;
if(mediastatus !=null && "0".equals(mediastatus)){
	list.get(i).setMediastatus(config.getMediastatus0());
				}


相關推薦

Hibernate執行查詢引發update操作解決方法

剛剛發現一個bug,就是在執行了匯出資料庫中的資料到excel表格後再去執行查詢操作會報錯,通過將 <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prope

關於Hibernate執行查詢引發update操作解決方法

遇到了這個問題 在網上查了各種方法 這裡收集整理了一下 產生原因:hibernate 做持久化時get 和 set 值,發現get 值不同則做同步更新到資料庫. 才會發生 查詢後又做更新操作 1、使用session.lock(object, LockMode.NONE)

ROS中執行roslaunch,顯示功能包不存在的解決方法

       在執行launch檔案時,如果顯示不存在這個package,則應注意可能是下述情況導致:         catmake編譯完,再用rosrun或roslaunch命令找不到package時,這時需要source ~/catkin_ws/devel/setup

已經設置utf8的mysql cmd中插入中文執行解決方法

客戶 res img 說明 設置 -1 bsp 插入 gbk 說明cmd客戶端的字符集是gbk,結果集也要設置為gbk。 使用語句 set character_set_client=gbk; set character_set_results=gbk; 就

修改salt-minion的id解決方法

停止 doc onf -m ini pki star pin .com centos7使用命令 /usr/bin/salt-minion start運行報錯Error parsing configuration file: /etc/salt/master - expect

Android studio 升級到3.0各種解決方法

   最近把AS升級到3.2.1後老工程出現了一系列問題 總的來說, 不要隨便用最新的東西, SDK也好,AS也好,對老工程都不友好, 要等其他人躺坑躺的差不多再搞 我是先把gradle直接升級到了5.0, AS升級到了3.2.1 , SDK升到了28, 然後就

TensorFlow-example執行解決方法

IOError: [Errno socket error] [Errno 101] Network is unreachable 問題 反正把包提前下載好了下次就再也不用擔心了,mv資料包到/temp/data http://yann.lecun.com/exdb/mnist/

關於node.js執行Microsoft sript host 解決方法

我也是剛接觸node.js,作為一個初學者,肯定會遇到一些不知道怎麼處理的問題,遇到問題很正常,關鍵是我們如何去解決它。對於node.js的優點可以說不言而喻了,單執行緒,非阻塞,事件驅動,賦予了它很快的相應和處理速度。但初學的過程並不是那麼愉快。 對於node.js的學習首先要做的肯定是安裝

java程式在eclipse上執行解決方法:Exception in thread "main" java.lang.NoClassDefFoundError:

最近在Linux上的eclipse中執行java程式出現了這樣的錯誤,弄了很久用了以下三種方法終後終於成功運行了,分享下,希望能幫助到大家。 Linux執行java程式提示錯誤: Exception in thread "main" java.lang.NoClassDefFoundEr

cuda8.0執行oceanFFT案例解決方法

今天在安裝cuda8.0後,準備跑oceanFFT,結果報下面的錯誤: ./oceanFFT: error while loading shared libraries: libcufft.so.8.0: cannot open shared object file: N

myeclipse非正常關閉啟動解決方法

       這段時間經常性遇到開機後myeclipse無法啟動報錯,前幾次按照網上的辦法刪除了plugins下所有檔案,雖然能啟動,但是所有的配置資訊以及專案都需要重新設定和匯入,讓我無比煩躁。         就在剛才,下班回家後啟動myeclipse發現又報錯了。

Hibernate 反向生成檔案解決方法

昨天用myeclipse6.5反向生成hibernate的POJO+*.hbm.xml出現這個錯誤: …… Association references unmapped class:Appraise …… 昨晚在網上查了半天,沒找到解決方法,很鬱悶於是睡覺去了。

安裝redis-執行make命令解決方法

問題原因:未安裝GCC cd hiredis && make static make[3]: 進入目錄“/opt/redis-3.0.4/deps/hiredis” gcc -st

操作docker解決

1.報FATA[0000] Post http:///var/run/docker.sock/v1.18/images/create?fromImage=ubuntu%3Alatest: dial unix /var/run/docker.sock: no such file

IDEA 安裝lombok外掛 設定Enable Annotation Processing編譯依然 解決方法

IDEA匯入的專案中有依賴lombok的get set註解,build專案時報錯:找不到get/set方法。查詢網上資料,安裝lombok外掛,如圖:安裝好外掛後,重啟IDEA後還是編譯報錯,又在設定中勾選了Enable Annotation Processing 如下圖:完

new JSONObject()不執行 解決方法

使用:import net.sf.json.JSONObject; 呼叫JSONObject x = new JSONObject()或者其它建構函式,不報錯直接異常。。catch了也不能打印出來,一般是json缺包。 struts2.1.6 json需要包: 1.c

org.hibernate.hql.internal.ast.QuerySyntaxException: USER is not mapped 解決

錯誤日誌: org.hibernate.hql.internal.ast.QuerySyntaxException: USER is not mapped [FROM USER] at org.hibernate.hql.internal.ast.QuerySyntaxEx

python——執行帶有%的sql執行解決方法

from sqlalchemy import create_engine, text 今天在使用pandas的pd.read_sql_query(sql,engine)方法讀取pg庫欄位時報錯,'

oracel sql執行加入快取, 不適合做sql 實驗的解決方法記錄

alter system set events = 'immediate trace name flush_cache';    清除快取, 每一次執行都從物理層面讀取。 alter system flush buffer_cache;

CentOS 7在執行yum操作

conf earch x86_64 amp ror centos 7 -- cal ear CentOS 7在執行yum操作時, 報錯:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6