欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用jpa的時候set實體類屬性自動持久化的解決方案

 更新時間:2021年08月06日 08:43:21   作者:低調(diào)的洋仔  
這篇文章主要介紹了使用jpa的時候set實體類屬性自動持久化的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用jpa的時候set實體類屬性自動持久化

實例代碼

Set<User> users = new HashSet<User>();  
User user = null;  
for(int i = 0; i < 10; i++){  
    user = new User();  
    user.setUserName("wy" + i);  
    users.add(user);  
}  
Company company = userDao.getCompany();  
company.setUsers(users);  

當(dāng)使用了實體類set屬性的時候,但是我們并沒有持久化,卻自動保存到數(shù)據(jù)庫了。

原因

Hibernate分為三種基本的狀態(tài):游離態(tài)、自由態(tài)(臨時狀態(tài))、持久態(tài)。

持久化狀態(tài):與session關(guān)聯(lián)并且和在數(shù)據(jù)庫有數(shù)據(jù),已經(jīng)持久化了并且在數(shù)據(jù)庫的緩存當(dāng)中了。

我這里的這個對象應(yīng)該是持久化狀態(tài)的對象然后我直接構(gòu)造了一個user對象的set集合,同時對這個對象進(jìn)行set操作,那么緩存Session中的數(shù)據(jù)發(fā)生改變,那么接著數(shù)據(jù)庫也會跟著進(jìn)行相應(yīng)的改變。所以就執(zhí)行了update的更新操作。

解決辦法:

1.如果這個對象(例子中的company)本身不需要用的話,可以直接new一個Company的對象出來然后再setUsers這個時候因為不是Session中的數(shù)據(jù),那么不會因為對象的屬性發(fā)生改變而同步到數(shù)據(jù)庫中去。

2. 如果這個對象(例子中的company)要用的到,那么,在set之前可以先將其轉(zhuǎn)為游離態(tài),這樣的話會用到session的幾個方法:close、clear、evict。

close方法:關(guān)閉session這樣這個對象肯定是游離態(tài)了,因為session已經(jīng)關(guān)閉了,但是往往我們實際的開發(fā)過程中,session在后面是要用的到的,所以這個方法可行,但是不一定用得上,分清具體的情況。

clear方法:將session中的所有的對象全部清除出緩存,這個方式有點勞師動眾,不過session清除了全部的對象之后自然就會變?yōu)橛坞x態(tài)了,這樣做不是很好吧我感覺。

evict方法:將某一個對象清除出緩存session,這個方法是很好的實現(xiàn)方式,推薦使用。調(diào)用的時候是這樣的,session.evict(Object obj);這樣就可以了。

使用注解獲取session方法

@PersistenceContext
    private EntityManager entityManager;

然后在方式中我們使用如下方式獲取session

 HibernateEntityManager hEntityManager = (HibernateEntityManager)entityManager;
        Session session = hEntityManager.getSession();

然后使用獲取到的session根據(jù)上面說的操作對象既可

jpa實體類一對多set與list使用

當(dāng)從一的一端取出其所對應(yīng)的多的一端時,如果用的是set那么取出多的一端的值時順序是無序的,如果用的是list那么取出多的一端的值時順序是有序的(其實就是list與set的特性罷了,然鵝。。。。。。)

問題:因為set查詢出的數(shù)據(jù)是無序的,如果當(dāng)一的一端對應(yīng)5條數(shù)據(jù),而分頁的單頁只顯示3條數(shù)據(jù),當(dāng)?shù)较乱豁摃r,其中的兩條數(shù)據(jù)可能與與上一頁的3條數(shù)據(jù)出現(xiàn)隨機相同的情況,因此會導(dǎo)致數(shù)據(jù)顯示的缺失和無序。

注:不過jpa設(shè)計的時候用的是set不是沒有道理的,主要是利用set的數(shù)據(jù)不可重復(fù)性,用于避免數(shù)據(jù)的重復(fù),比如新增數(shù)據(jù)的時候避免數(shù)據(jù)的重復(fù)插入。

完美的解決辦法:

在實體類set屬性上加上@orderBy("id asc")屬性進(jìn)行排序,然后在取值的時候使用LinkedHashSet(不可重復(fù)且有序sss)接住即可

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解SpringBoot中@SessionAttributes的使用

    詳解SpringBoot中@SessionAttributes的使用

    這篇文章主要通過示例為大家詳細(xì)介紹了SpringBoot中@SessionAttributes的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-07-07
  • 解決@RequestBody使用不能class類型匹配的問題

    解決@RequestBody使用不能class類型匹配的問題

    這篇文章主要介紹了解決@RequestBody使用不能class類型匹配的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java Gui實現(xiàn)肯德基點餐收銀系統(tǒng)

    java Gui實現(xiàn)肯德基點餐收銀系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java Gui實現(xiàn)肯德基點餐收銀系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • spring裝配bean的3種方式總結(jié)

    spring裝配bean的3種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于spring裝配bean的3種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java使用swt顯示圖片示例分享

    java使用swt顯示圖片示例分享

    這篇文章主要介紹了java使用swt顯示圖片示例,修改后就可變?yōu)閳D片瀏覽器,需要的朋友可以參考下
    2014-02-02
  • SpringCloud-Config分布式配置代碼示例

    SpringCloud-Config分布式配置代碼示例

    這篇文章主要介紹了SpringCloud-Config分布式配置代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot項目中使用AOP的方法

    SpringBoot項目中使用AOP的方法

    本篇文章主要介紹了SpringBoot項目中使用AOP的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java 非靜態(tài)初始化的例子

    Java 非靜態(tài)初始化的例子

    非靜態(tài)初始化和靜態(tài)初始化一模一樣,只不過少了static關(guān)鍵字。但是如果兩者共存的話,非靜態(tài)初始化是比靜態(tài)初始化慢一拍的。下邊我們舉兩個例子來看一下。
    2020-09-09
  • Java排序算法之堆排思想及代碼實現(xiàn)

    Java排序算法之堆排思想及代碼實現(xiàn)

    今天小編就為大家分享一篇關(guān)于Java排序算法之堆排思想及代碼實現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 性能調(diào)優(yōu)之java服務(wù)器容器調(diào)優(yōu)詳解

    性能調(diào)優(yōu)之java服務(wù)器容器調(diào)優(yōu)詳解

    這篇文章主要介紹了java服務(wù)器容器調(diào)優(yōu),如果接口響應(yīng)時間超過了既定數(shù)據(jù),項目支撐不了這么大的請求,就需要對項目以及項目接口進(jìn)行數(shù)據(jù)庫、容器、緩存等方面的調(diào)優(yōu),文章中有詳細(xì)的代碼示例,需要的朋友可以參考一下
    2023-04-04

最新評論