【问题标题】:Hibernate session updation issue休眠会话更新问题
【发布时间】:2017-11-19 15:51:41
【问题描述】:

我在我的一个 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;
    }

只是想知道这是否是一种好方法,还是我可以采用更好的方法?

【问题讨论】:

  • 快速搜索找到了this,这可能会给您带来其他设计理念。

标签: java json hibernate


【解决方案1】:

您可以使用 session.evict(entity) 将实体从您加载它的会话中分离出来,然后您应该能够在主服务器上更新它。

这种方法的问题是你不能真正进行交易,你不能确定实体没有同时发生变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2014-08-14
    相关资源
    最近更新 更多