在Hibernate中,在不知道任何主键的情况下,更新给定实体的关系集的最佳方法是什么?我基本上希望它检查当前的关系集,以查看是否有任何相关实体具有与要保存的相关的所有相同的字段值,如果是,则更新它,否则创建一个新的。
以下是我的代码:
public void updateProcesses(ComputerEntity computerEntity, JsonNode data) {
Set<ProcessEntity> processEntities = new HashSet<>();
for (JsonNode process : data.get("Processes")) {
ProcessEntity processEntity = new ProcessEntity();
processEntity.setPid(process.get("Pid").asInt());
processEntity.setName(process.get("Name").asText());
processEntity.setDescription(process.get("Description").asText());
processEntity.setWindowTitle(process.get("WindowTitle").asText());
processEntity.setThreadCount(process.get("ThreadCount").asInt());
processEntity.setCpu((byte) process.get("Cpu").asLong());
processEntity.setRam(process.get("Ram").asLong());
processEntity.setRunTime(process.get("RunTime").asLong());
processEntity.setComputer(computerEntity);
processEntities.add(processEntity);
}
computerEntity.setProcesses(processEntities);
Session session = Fusion.instance().getSession();
session.beginTransaction();
session.update(computerEntity);
session.getTransaction().commit();
session.close();
}
目前,它会在数据库中重新创建新的流程记录,并且不会删除或更新导致重复的旧流程记录。