gpt4 book ai didi

java - hibernate 延迟加载未更新

转载 作者:行者123 更新时间:2023-11-29 09:08:33 24 4
gpt4 key购买 nike

您好,我正在与 jboss 一起开发 Web 应用程序。我有一个类似于论坛页面的页面,您可以在其中发布消息并回复已发布的消息。在我的 jsf 中,我有三个 div 标签,一个用于添加新消息,一个用于列出所有消息,一个用于查看所选消息。所有标签都嵌入其中,每个标签都有渲染属性,如下所示:

<h:pannelGroup rendered="#{myController.shouldRender('add')}">

<!-- Here is my html for adding new message -->

</h:pannelGroup>


<h:pannelGroup rendered="#{myController.shouldRender('list')}">

<!-- Here is my html for listing messages -->

</h:pannelGroup>

<h:pannelGroup rendered="#{myController.shouldRender('view')}">

<!-- Here is my html for viewing message and its replys..
also there is hidden div with html for popup to post reply -->


<div id="reply">
<!-- This is hidden html that is shown when clicked reply
link in the message div below.
When shown users can add reply to the message -->
</div>

<div id="message">
<!-- Here is show the message itself -->
</div>

<div id="replyList">
<!-- Here is list replys for the message currently beeing viewed

For listing the replys i used ui:repeate and c:forEach from the jstl core
both resulting with same outcome.

In my message object i have list of replys which i load lazily...
-->
</div>

</h:pannelGroup>

我的支持 bean,去掉了所有注释和其余代码...

MyController{

String page;

public boolean shouldRender(String view){
return page.equals(view);
}
}

我使用菜单项列表中的 actionListener 设置的页面属性,在我将用户重定向到 message.xhtml 页面之前,我将 myController 的属性页面设置为我想要查看的 div 名称,例如如果我单击添加链接,我会设置页面 =“添加”并重定向到 message.xhtml。在那里, Controller 从外部获取页面集并呈现添加的 div。

因为我无法设法使扩展持久性上下文正常工作,所以我在/* 上设置了过滤器以打开用户事务,然后将实体管理器与那个合并,在 chain.DoFilter 之后我提交了我的事务。我需要手动启用延迟加载..

问题是,当我添加回复消息时,回复列表不会立即刷新,我需要返回消息列表,然后再次在 View div 中打开相同的消息以刷新回复列表.. 或者... 在添加回复的方法中,我尝试将我的回复手动加载到消息对象拥有的回复列表中(延迟加载并映射@OneToMany),这种方式有效,但我不喜欢那个解决方案。

谁能告诉我 weather hibernate 正在重新加载延迟加载列表,因为我管理事务并且我假设一旦它加载了我的列表,它就不会自行刷新。

最佳答案

当在同一 session 中修改列表时,它会更新。

当列表在不同的 session 中被修改时,它不会更新。

由于 session 对象不是多线程安全的,在您的环境中可能每个用户都有自己的 session 实例,因此您将属于第二种情况。要强制刷新,您可以逐出()父实例并再次加载()它,或者清除() session 或创建并使用新的 session 。

注意延迟加载。由于子元素是在第一次使用时加载的(而不是与父实例一起加载),它们已经可以反射(reflect)出在加载父对象时尚未进行的修改。

关于java - hibernate 延迟加载未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581792/

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