首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA持久化对象而不调用持久化

JPA持久化对象而不调用持久化
EN

Stack Overflow用户
提问于 2010-11-17 09:21:05
回答 2查看 441关注 0票数 0

我有一个实体类文档和另一个叫做Space的文档。关系:

代码语言:javascript
复制
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST,
        CascadeType.MERGE, CascadeType.REFRESH}, optional = true)
@ForeignKey(name = "FK_TO_SPACE__DOCUMENT")
@IndexedEmbedded(prefix = DocumentDefaultFields.SPACE_TO_PREFIX)
private Space toSpace;

好吧,我会查询数据库并将一些文档放入LinkedList中。

这个列表被绑定到一个dataTable,在那里我可以执行一些更新操作,比如:

代码语言:javascript
复制
<a:commandLink value="move" action="#{moveDocsOperation.moveDocumentToNewSpace(entity)}" reRender="confim,origTable,newTable"/>

其方法是:

代码语言:javascript
复制
public void moveDocumentToNewSpace(final Document document) {
    log.info("~~move document #0 from space #1 to space #2", document.getDocumentId(), origSpace.getPath(), newSpace.getPath());
    document.setToSpace(newSpace);
    origSpaceDocuments.remove(document);
    newSpaceDocuments.add(document);
    entityAuditer.auditBean(document, Crud.UPDATE);
}

我不明白为什么在设置文档实体的toSpace时,更新也是在DB中完成的,而没有实际执行持久化.

你知道为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-17 09:43:44

当您通过hibernate会话加载一个对象时,它由该会话管理。当您进行更改时,在刷新时对象中的更改将与数据库同步。

因此,不需要调用persist()来持久化数据修改。(相关:http://techblog.bozho.net/?p=227)

票数 3
EN

Stack Overflow用户

发布于 2010-11-17 11:01:12

一种可以绕过这个问题并在不持久化数据库的情况下对实体进行更改的方法是从会话中移除:

代码语言:javascript
复制
org.hibernate.Session session = (Session) em.getDelegate();
session.evict(yrEnity);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4202993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档