gpt4 book ai didi

java - SEAM/hibernate : I can't get changes from database during a Conversation

转载 作者:行者123 更新时间:2023-11-30 11:56:42 25 4
gpt4 key购买 nike

我有一个类:

@Name("foo")
@Scope(ScopeType.CONVERSATION)
public class Foo {

@In
Session session;

@In
private Conversation conversation;

@RequestParameter
Long barId;

/* outjected fields */
@Out
Bar bar;

/* some attributes and methods */

public void start() {
/* some initializations */
this.bar = (Bar) session.get(Bar.class, barId);
}

public void end() {
/* some actions involving bar and bar.getBaz() */
conversation.end();
}
}

方法 start() 在 session 开始时被调用并初始化属性 bar(Bar 是某个实体类)。然后,bar 有一个属性 baz,它也是一个实体。

在对话过程中,可能会发生其他用户修改与我们的栏相关的 baz 对象。然后,当调用 end() 时,bar.getBaz() 返回 baz 的(未修改)版本,而且覆盖到数据库。

我尝试使用 session.flush()、session.merge(bar)、session.merge(bar.getBaz()) 在 end() 方法中获取 baz 的修改状态,但没有任何效果。如何避免数据库污染?

最佳答案

抱歉,我无法给出详尽的答案。我不得不从被另一个 serverlet 修改的数据库中重新加载实体。我通过使用 JPA 中的 refresh() 方法来完成此操作。Hibernate session 还提供了 refresh() 方法。您可能还想考虑用于乐观锁定的 @Version 注释。

关于java - SEAM/hibernate : I can't get changes from database during a Conversation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com