java - 在 JSF 中使用实体

标签 java jsf jpa jsf-2 jpa-2.0

我正在编写一个 Web 应用程序 (Tomcat 7),因此没有 JTA,并且希望显示项目列表,包括与 JSF 页面中每个项目关联的任务。

有 2 个实体 - 包含任务集合的项目。从我的托管 Bean 中,我调用一个便捷方法来检索所有 Activity 项目,然后对该项目集合进行迭代 (ui:repeat),并希望显示每个项目的任务。当我尝试执行此操作时,我收到持久性异常,因为持久性上下文不再在范围内。

如果不创建项目和任务的支持 bean,也不使用扩展上下文,我还有什么其他选择。

最佳答案

经过更多的思考和研究,我回来正确地描述了我所处的情况,然后还提供了解决问题的方法。

结果是项目实体的任务关系被指定为延迟加载。 JPA 使用代理对象,该对象在请求获取数据之前等待对集合的请求。这成为一个问题,因为我们试图在持久上下文分离实体后访问信息。

分辨率:

触发延迟加载 - 当持久上下文仍在范围内时,调用集合 getter 和您想要数据的任何其他方法,这会触发提取数据并将其添加到实体。

将获取类型设置为急切 - 查看使用延迟加载背后的原因并将获取类型更改为急切。 “FetchType.EAGER”

获取联接 - 将关联添加为要与查询一起获取的 JP QL 的一部分。这优化了一次调用中加载的查询和关联,同时仍然只返回单个实体。 “从项目 p 中选择 p LEFT JOIN FETCH p.tasks”

希望这可以帮助下一个人找到问题的解决方案。

关于java - 在 JSF 中使用实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9897936/

相关文章:

ajax - JSF - Ajax 调用 - 这段代码有什么问题?

java - JPA 外键 OneToMany

java - @OneToOne Hibernate 带注释。无法正确保存

java - 错误 :(27, 13) 无法解析 : com. antonyt.infiniteviewpager :library:1. 0.0

java - 如果声明但未初始化对象的变量是否会使用内存空间?

java - 如何在 JSF 中编写自己的转换器

java - JPA Hibernate 意外获取 @OneToOne 映射实体的记录,我应该将映射更改为 @ManyToOne 还是执行其他操作?

java - 如何验证表单页面中的整数输入?

java - 使用 Apache Poi 输出 docx 中的无限虚假页面

jsf - Tomcat @Resource 注释 API 注释在 Tomcat 7 中停止工作