java - JPA 持久化对象而不调用 persist

标签 java hibernate orm jpa

我有一个实体类 Document 和另一个名为 Space 的实体类。关系:

@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 中。

此列表绑定(bind)到数据表,我可以从中执行一些更新操作,例如:

<a:commandLink value="move" action="#{moveDocsOperation.moveDocumentToNewSpace(entity)}" reRender="confim,origTable,newTable"/>

以及方法:

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时,更新也在数据库中完成,而没有实际执行PERSIST....

你知道为什么吗?

最佳答案

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

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

关于java - JPA 持久化对象而不调用 persist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202993/

相关文章:

java - 获取错误 java.lang.NumberFormatException : For input string: "16.0"

java - 使用 Hibernate 更新数据库表的更快方法(Java 8 减少?)

javascript - Knex 数据未插入 postgres

java - 编写 orm.xml 的最佳实践

java - 如何根据索引在数组中添加值,以便数组以循环方式运行

java - Java中循环进度条显示

Java - 合并 Hibernate beans/entities - 在 saveOrUpdate 之前

java - 使用 AttributeConverter 转换为 UUID 导致 'No Dialect mapping for JDBC type' 异常

java - Eclipse 无法识别 persistence.xml 的内容

java - 编译没有依赖的Java代码