我使用JPA(Eclipse Link 2.5)进行持久性。我的Web应用程序包含AJAX页面更新。保存帖子时,发布的内容会在不刷新浏览器的情况下显示。该帖子具有使用OneTo多关系与之关联的标签。这些标签应该在保存后也会显示出来。但是,由于启用了缓存,我无法获取标签。
这是我的代码:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public Sqask save(AskTag tags) {
try {
Sqask ask = saveAsk(tags);
return ask;
} catch (Exception e) {
context.setRollbackOnly();
return null;
}
}
public Sqask saveAsk(AskTag tags) {
Sqask ask = new Sqask();
ask.setCreator(tags.getAskedBy());
em.persist(ask);
em.flush();
saveTags(tags, ask);
return ask;
}
public void saveTags(AskTag tags, Sqask ask) {
if (!tags.getNask().isEmpty()) {
NAsk nask = new NAsk();
NAskPK naskPK = new NAskPK();
naskPK.setAsk(ask.getId());
naskPK.setNoun(tags.getNask());
naskPK.setCreator(tags.getAskedBy().getGuid());
nask.setNAskPK(naskPK);
nask.setAsk(ask);
nask.setCreator(tags.getAskedBy());
em.persist(nask);
}
if (!tags.getVask().isEmpty()) {
VAsk vask = new VAsk();
VAskPK vaskPK = new VAskPK();
vaskPK.setAsk(ask.getId());
vaskPK.setVerb(tags.getVask());
vaskPK.setCreator(tags.getAskedBy().getGuid());
vask.setVAskPK(vaskPK);
vask.setAsk(ask);
vask.setCreator(tags.getAskedBy());
em.persist(vask);
}
if (!tags.getForask().isEmpty()) {
PAsk forask = new PAsk();
PAskPK foraskPK = new PAskPK();
foraskPK.setAsk(ask.getId());
foraskPK.setPrep(tags.getForask());
foraskPK.setCreator(tags.getAskedBy().getGuid());
forask.setPAskPK(foraskPK);
forask.setAsk(ask);
forask.setCreator(tags.getAskedBy());
em.persist(forask);
}
if (!tags.getAboutask().isEmpty()) {
PAsk aboutask = new PAsk();
PAskPK aboutaskPK = new PAskPK();
aboutaskPK.setAsk(ask.getId());
aboutaskPK.setPrep(tags.getAboutask());
aboutaskPK.setCreator(tags.getAskedBy().getGuid());
aboutask.setPAskPK(aboutaskPK);
aboutask.setAsk(ask);
aboutask.setCreator(tags.getAskedBy());
em.persist(aboutask);
}
em.getEntityManagerFactory().getCache().evict(Sqask.class, ask.getId());
em.merge(ask);
}
我怎样才能让事情运转起来?如何刷新一个实体及其所有关联的实体?谢了。
在em.refresh(ask)之前添加em.flush()之后,代码按照我的预期工作。它获取了与实体ask相关的列表。有人能解释一下为什么吗?非常感谢
我不太确定它是否会工作,但请尝试在您的代码中,如果这是后端的问题。
em.merge(ask);
ask.getId();
或
em.merge(ask);
ask.getId();
ask.getCollection1ofAsk().size();
ask.getCollection2OfAsk().size();
.....
如果我正确理解您的问题,这可能会帮助您-请在返回前注意em.refresh呼叫。这确保了刷新所有OneToOne和OneToMany连接,即使您只保存相关记录的ID。
public T create(T entity) {
em.persist(entity);
em.flush();
em.refresh(entity); // this could be important
return entity;
}
和RDD相似,DStreams也允许开发者持久化流数据到内存中。在DStream上使用persist()方法可以自动地持久化DStream中的RDD到内存中。如果DStream中的数据需要计算多次,这是非常有用的。像reduceByWindow和reduceByKeyAndWindow这种窗口操作、updateStateByKey这种基于状态的操作,持久化是默认的,不需要开发者调用persist(
在Spring声明性事务管理中,当您试图持久化数据库中已经存在的某个实体时,您只能在Spring事务提交期间获得DataIntegrityViolationException。因此,此方法不起作用,此处不会捕获大括号中的异常: 仅在结束时: 我发现了几个解决方法: 不使用@事务 使用冲洗 调用服务时捕获异常 在持久化之前查找 现在我在考虑em.flush和em.find(在坚持之前)。哪种方法更好
本文向大家介绍浅谈Webpack 持久化缓存实践,包括了浅谈Webpack 持久化缓存实践的使用技巧和注意事项,需要的朋友参考一下 前言 最近在看 webpack 如何做持久化缓存的内容,发现其中还是有一些坑点的,正好有时间就将它们整理总结一下,读完本文你大致能够明白: 什么是持久化缓存,为什么做持久化缓存? webpack 如何做持久化缓存? webpack 做缓存的一些注意点。 持久化缓存 首
Akka持久化使有状态的actor能留存其内部状态,以便在因JVM崩溃、监管者引起,或在集群中迁移导致的actor启动、重启时恢复它。Akka持久化背后的关键概念是持久化的只是一个actor的内部状态的的变化,而不是直接持久化其当前状态 (除了可选的快照)。这些更改永远只能被附加到存储,没什么是可变的,这使得高事务处理率和高效复制成为可能。有状态actor通过重放保存的变化来恢复,从而使它们可以重
目标 能够运行集合,而无需在运行集合之前逐个完成每个调用的授权过程。 我所尝试/注意到的 > 在Postman中使用OAuth2授权助手时,我没有发现保存返回的刷新令牌的方法,因此在访问令牌到期时使用它来获取新的令牌。(我建议将此功能放在Postman Github问题中的助手中。) 我尝试在集合开始时创建几个步骤来复制助手,但无法通过需要用户交互来批准/拒绝的步骤(这是有道理的,因为否则会带来安
在持久性方面,spark中的和有什么区别?