簡體   English   中英

休眠會話更新問題

[英]Hibernate session updation issue

我在我的一個Java應用程序中使用了休眠模式。 數據庫在主從層次結構上運行。 在一個類中,我試圖通過首先從主數據庫中獲取整個實體,然后對其進行更新並將其保存在主數據庫中來更新現有實體。 但是由於此調用會增加主數據庫上的負載,因此我希望所有讀取僅發生在從屬數據庫上,並且僅在主數據庫上進行更新。 我無法從奴隸讀取並寫入主人,因為休眠以某種方式將會話與實體保存在一起,並且不允許您在其他奴隸會話中進行更新。

我想出了一個解決方案:

首先,我將實體更改為json,然后讀取json形成一個新實體,該實體有望解決會話問題。 下面是代碼:

private UserEntity getUserEntityForUpdate(UserData userData) {
        UserEntity userEntity = (userEntity) sessionFactory.getCurrentSession().byId(userEntity.class).load(user.getId());
        ObjectMapper mapper = new ObjectMapper();
        String user1 = null;
        try {
            user1 = mapper.writeValueAsString(userEntity);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        userEntity obj = new UserEntity();
        try {
            obj = mapper.readValue(user1, userEntity.class);
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (obj.getId() != null) {
            userEntity.setId(user.getId());
        }
        obj.setEnabledBy(user.getEnabledBy() != null ? user.getEnabledBy() : "");
        obj.setEnabledAt(user.getEnabledAt());
        return obj;
    }

只想知道這是一個好方法還是我可以尋求更好的方法?

您可以使用session.evict(entity)將實體與從中加載實體的會話分離,然后應該可以在主數據庫上對其進行更新。

這種方法的問題在於您不能真正進行交易,不能確定實體在此期間沒有發生變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM