① hibernate防止重復插入數據
有一個方來法可以提供
在建源一個欄位叫hashcode int類型
在插入數據時,把每一列數據的hashcode值通過hashCode()方法取得,並且相加,得到的結果寫入資料庫的hashcode欄位
插入數據時,取得所有欄位hashcode值然後查詢該值是否在資料庫存在,不存在就插入
但是這樣做也有小概率事件發生,也就是2個實際不重復的數據其hashcode的值是相同的,不過這概率應該很小
你可以試試
參考如下:
class Person {
String name;
int age;
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
}
補充一點,你甚至可以讓hashcode欄位成為主鍵
② hibernate會不會重復保存List集合內的重復對象
看情況了來,如果你的主自鍵生成策略設置的是assignee,那麼你的對象必須要有id值,此時只要出現重復id的對象,而且你做新增時候,用那個save方法的話,會報錯。為了解決這個問題,你可以把主鍵不要設置assginee,如果你設置了assginee,那麼做新增的時候用saveOrUpdate方法試試。
③ hibernate hql 語句去除重復數據
參考如下:
/**
* 功能:根據品牌查詢
*
* @param pageSize
* 每頁大小
* @param currentLPagem
* 當前第幾頁
* @param proctBlack
* 產品品牌
* @param proctBlackItem
* 產品分類
* @param proctSize
* 產品尺碼
* @param keyWord
* 搜索關鍵字
* @return
*/
public pageBean seachProctByBrank(int pageSize, int currentLPage,
String proct_Brank, String proct_itemName) {
// final String hql = "from " + OgrilProcts.class.getName()
// + " where proct_Brank='" + proct_Brank
// + "' and proct_itemName='" + proct_itemName
// + "' order by proct_registerDate desc";
final String hql = " from "
+ OgrilProcts.class.getName()
+ " as proct where proct.proctItemName='"
+ proct_itemName
+ "' and proctBrank='"
+ proct_Brank
+ "' and not exists( from "
+ OgrilProcts.class.getName()
+ " where proctItemName='"
+ proct_itemName
+ "' and proctBrank='"
+ proct_Brank
+ "' and proctItemNumber=proct.proctItemNumber and proctId<proct.proctId )";
int allRow = this.getAllRowCount(hql);// 總記錄數
int totalPage = pageBean.countTotalpage(pageSize, allRow);// 總頁數
final int offset = pageBean.countOffset(pageSize, currentLPage);// 當前頁開始記錄
final int length = pageSize;
final int currentPage = pageBean.countCurrentPage(currentLPage);
List list = this.queryForPage(hql, offset, length);// 記錄
// 把分頁信息保存到Bean中
pageBean pagebean = new pageBean();
pagebean.setPageSize(pageSize);
pagebean.setCurrentPage(currentPage);
pagebean.setAllRow(allRow);
pagebean.setTotalPage(totalPage);
pagebean.setList(list);
return pagebean;
}
④ Hibernate 添加數據時怎麼去掉重復的數據
除了主鍵 你還可以創建聯合唯一鍵 確保數據局部不相同
⑤ 使用hibernate是報出重復的實體類異常 下邊有圖片 哪位大神可以給看一下 謝謝!
這個錯,肯定是你粗心導致的,映射文件中存在錯誤,仔細對照你出錯的實體類與專映射文件中的配置
還有屬Duplicate 是重復的意思 ,Duplicate class/...可能的原因是
1、真的是重復地定義了資料庫映射文件
2、缺少或重復定義某些欄位
3、數據訪問方式配置錯誤,已至於找不到映射文件對應的資料庫
4、使用類似這種config.addClass(Medicine.class);操作,導致執行時重復讀取配置
你的異常沒貼完整,我只能猜測你的District類重復配置,或是重復讀取了
⑥ hibernate 一對多 查詢如何去掉重復數據
我建議要用種式要set排序或者增加其條件麻煩並且寫配置文件靈
我項目都兩取數據第取AA做條件取B取少條排序都科
⑦ hibernate插入動態數據保證不重復
方法來1:
從資料庫入手,設定檢驗自重復的主鍵
方法2:
寫個每天讀取A表數據的SQL,這個推薦使用
SQL:SELECT * FROM TABLE_A A WHERE A.CREATE_DATE=TO_CHAR(SYSDATE-1,'YYYY-MM-DD') AND NOT EXISTS (SELECT * FROM TABLE_B B WHERE B.ID=A.ID)
這上ORACLE的,不知道你具體的表結構和環境。
⑧ java hibernate防止插入重復數據的問題
你可以先把數據放到set集合里,set不能有重復的,過濾掉之後在插入資料庫
⑨ ssh hibernate 偶爾插入重復數據,會是什麼原因呀。網路問題嗎重復提交求解,在線等
防止重復提交 應該是網頁你點了兩次 但是你沒發現 所以兩次insert操作 方法防止重復提交 然後事務回滾就行了 網上有很多例子的