【发布时间】: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,这可能会给您带来其他设计理念。