Java Hibernate会话更新问题

Java Hibernate会话更新问题,java,json,hibernate,Java,Json,Hibernate,我正在我的一个java应用程序中使用hibernate。数据库在主从层次结构上运行。在其中一个类中,我试图通过首先从主数据库获取整个实体来更新现有实体&然后更新它并将其保存在主数据库中。但是,由于这个调用会增加主数据库上的负载,所以我希望所有的读取只从从属数据库进行,并且只在主数据库上进行更新。我无法从slave读取数据,也无法向master写入数据,因为hibernate以某种方式将会话与实体一起保存,并且不允许您在其他slavesession中进行更新 我想出了一个解决办法: 首先,我将把实

我正在我的一个java应用程序中使用hibernate。数据库在主从层次结构上运行。在其中一个类中,我试图通过首先从主数据库获取整个实体来更新现有实体&然后更新它并将其保存在主数据库中。但是,由于这个调用会增加主数据库上的负载,所以我希望所有的读取只从从属数据库进行,并且只在主数据库上进行更新。我无法从slave读取数据,也无法向master写入数据,因为hibernate以某种方式将会话与实体一起保存,并且不允许您在其他slavesession中进行更新

我想出了一个解决办法:

首先,我将把实体更改为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.execut(实体)将实体从加载它的会话中分离出来,然后您应该能够在主服务器上更新它

这种方法的问题在于,您无法真正进行交易,也无法确定实体在此期间没有发生变化。

快速搜索可能会为您提供其他设计思路。