问题标签 [hibernate-session]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4430 浏览

java - 休眠会话和线程安全

我试图理解“休眠会话不是线程安全的”的含义。我已经知道的(如果我错了,请纠正我):

  1. 非 JTA 环境中的会话保存在 Thread Local 中。所以它绑定到当前线程。
  2. 在新线程中调用 getCurrentSession() 会将新会话与其自己的本地线程相关联。
  3. 假设我们在 2 个线程(T1,T2)之间共享一个实体,在 T1 中加载并在 T2 中使用,我们可能会遇到延迟加载等问题,因为 T1 和 T2 中的会话不同。

这解释了在不同会话之间共享实体时可能出现的问题。

我无法理解的是在 2 个或更多线程之间共享 Session 时可能出现的问题。我知道 Session 中的方法不是线程安全的,并且可能导致竞争条件等,但不清楚如何?如果有人可以用示例进行解释或列出一个或多个场景以进行澄清,我将不胜感激。

提前致谢

0 投票
0 回答
916 浏览

grails - Grails Hibernate 会话在石英作业中不可用?

我正在开发一个利用 Quartz 插件执行计划任务的小型 Grails 应用程序。看来我的石英工作无法访问休眠会话。下面是例外。

由 DataAccessResourceFailureException 引起:无法获取当前的 Hibernate Session;嵌套异常是 org.hibernate.HibernateException: No Session found for current thread

版本:Grails 2.4.4、Quartz 1.0.1 和 Hibernate 4.3.6.1

有解决办法吗?这是 Grails 升级问题吗?

在此先感谢您的帮助。

0 投票
1 回答
563 浏览

java - java.lang.NoClassDefFoundError:无法初始化类 DataLayer.HibernateAdapter

我已将我的 Java 项目(Web 服务)修改为动态 Web 模块。我使用 Tomcat 7.0.59 作为服务器。在启动服务器时,它正在启动,没有任何问题。但是,如果我尝试访问 Web 服务方法,那么我最终会收到错误消息:“无法初始化类 DataLayer.HibernateAdapter java.lang.NoClassDefFoundError: 无法初始化类 DataLayer.HibernateAdapter ”。任何人都请帮助我,而不仅仅是将其标记为“重复”。如果必须修改代码,请提供详细步骤。谢谢!!

控制台日志:

数据库上下文.java:

0 投票
0 回答
1211 浏览

java - Hibernate + Spring:无法过滤延迟加载的集合

我正在使用 Spring 和 Hibernate 为我的实体实现软删除逻辑。我使用@Filter Hibernate 注释来执行这个逻辑。但是有一个我无法解决的问题:延迟加载的集合中的对象没有被过滤。

代码很简单:

所以逻辑是“在打开Order对象时不显示已删除的OrderItem s” 这是 DAO 中返回 Session 对象的方法。Session 工厂是 Spring 的 org.springframework.orm.hibernate4.LocalSessionFactoryBean。

因此,仅当我请求 List of Order时才显式调用此方法。但有趣的是,我的orderItems List 的 PersistenceSet 似乎有一个null Session (这很奇怪,因为我没有得到任何 Session LazyInitializationException)。所以过滤器“deletedOrderItemFilter”不应用于orderItems列表。

我当然已经用谷歌搜索过了,我发现一旦我获得订单列表的交易关闭,会话也关闭。但我仍然找不到任何解决方案。我试图显式地为 PersistenceSet 分配一个新的临时会话(在获取它时),但仍然没有运气(尽管会话工厂似乎在过滤器列表中有我的过滤器)。

任何帮助,将不胜感激。

更新好的我可以用“脏”的方式解决它:

  • OrderItemRemovable用类似的方法实现我自己的接口isRemoved
  • orderItemsgetter 调用通用过滤方法中迭代项目并过滤它们。缺点是我必须从数据库中加载所有对象 - 已删除而不是未删除。

更新LazyInitializationException由于 sessionFactory Spring bean 配置属性, 我没有得到任何信息:

所以我猜:没有交易 - 没有会话 - 没有应用过滤器。

0 投票
1 回答
343 浏览

hibernate - 我的服务层上的交易

我有一个已标记的服务@Transactional。唯一的问题是,我正在研究在调用 save 方法时需要提交对象的方法。

我已经从类级别中删除了注释,并将除我的之外的每个方法都标记为@Transactional(DAO 也被标记@Transactional)。我确实看到我的信息现在正在像我想要的那样立即保存,但是当我尝试执行 findBy 时,我得到了“线程中不存在会话”异常。

有谁知道这个问题以及如何解决它?

0 投票
0 回答
621 浏览

hibernate - 关闭 Hibernate 会话不会释放表上的锁定 - Hibernate,Derby

我正在尝试保存一个实体

此方法是从 Spring 事务上下文中调用的

事务开始并提交没有任何问题,但问题是即使在 Hibernate 会话关闭后创建的锁仍未释放,当我想从该表中选择数据时会导致问题

我正在使用 Spring 4.0.1.、Hibernate 4、Derby 10.10.1.1。

Hibernate 会话关闭是否释放锁?它是如何工作的?是spring事务上下文的问题吗?

0 投票
0 回答
64 浏览

java - Hibernate 生成的 Id 不一致

我有一个主要方法,它顺序调用两个 Web 服务。第一个 Web 服务首先将数据插入到请求表中,该请求表具有使用休眠顺序生成的主键。该表还有一个状态字段,其初始状态为“已接收”。然后这是第一个 Web 服务,处理此请求,然后将状态更改为“已处理”。

现在主方法调用第二个 Web 服务来获取状态为“已处理”的请求。由于 main 方法的调用是顺序的,因此第二个 Web 服务调用中只能有一个状态为“已处理”的条目。在此之后,主方法休眠 5 秒并无限重复处理。此外,当我获取此记录时,我将状态更改为“已完成”。

此外,Web 服务正在远程访问数据库。数据还包含一个 requestId(这不是主键)。

所以问题是当这个过程持续 1 小时时,我发现我发送和接收的 requestId 存在一些不一致。这些 ID 不匹配。而且我可以看到有多个条目的状态仍然存在Processed。我使用休眠 id 生成器作为增量,但是在多个集群中测试这个系统时,我遇到了 uniqueConstraint 异常。所以我开始使用序列生成器,现在面临这个问题。

提交后是否需要使用刷新?

0 投票
2 回答
1541 浏览

hibernate - org.hibernate.LazyInitializationException:无法延迟初始化角色集合:无法初始化代理 - 无会话

我不明白为什么会这样。根据代码路径,当引发此异常时,我应该在同一个线程中并且会话应该存在。

有人能告诉我我在这里想念什么吗?

我有设置

在 hibernate.cfg.xml 文件中

我在 Servlet 过滤器中创建了以下代码

在 index.xhtml 文件中,我有以下调用:


做一些事情

index.xhtml 正在使用使用 ui 包含加载 menu.xhtml 文件的模板。菜单文件然后插入菜单列表。从 menuItemsViewController 调用 servicesMenuItems 最终以以下代码结束

如您所见,会话存在,什么时候session.refresh(bean)不是抛出异常而是bean.getObligations()抛出,

未能延迟初始化角色集合:data.User.obligations,无法初始化代理 - 无会话”

任何想法为什么?

0 投票
0 回答
266 浏览

java - Hibernate Session 实践

我正在处理应用程序使用数据库中的某些配置的任务。配置存储在 java 持久对象中。在服务器启动时,会创建 Hibernate 会话,并将所有配置数据加载到具有延迟加载选项的对象中。并发用户请求使用相同的对象。

配置数据的结构:

配置数据库结构

工作流程: 工作流程

为了。例如。Person person 是一个休眠的实体。(java 持久化 obj。)

person 对象在服务器启动时加载了休眠获取列表调用。只有一个 sessionfactory 和 session 被初始化。DAO 只接听电话。

在随后的服务器请求中,访问人员对象的属性。

一般来说,我不确定此设置如何适用于多个并行服务器请求。

1) 长时间保持会话开放;它会引起任何问题吗?2)这是一个好习惯吗?我知道会话应该在每次 CRUD 操作后关闭。但特别是对于上述工作流程,正确的方法应该是什么。3)多个服务器请求可以访问同一个持久实体吗?(只接电话)

寻找一些指导和帮助。与设计和性能相关的任何输入。

0 投票
3 回答
2260 浏览

java - 休眠: session.get(...) 与 session.getNamedQuery(...)

在事务过程中,我创建/保存一个对象,并在事务结束时再次读取对象(在设置历史事件之前)

当我使用session.getNamedQuery(...). 我总是得到对象acteur的空值。在会话中保存演员之前调用的方法creerActeur(Integer pkDeclaration, Acteur acteur),但不将其保存到数据库中。实际上,actor 仅在事务结束时才被持久化。

当我们从 session 中获取对象时,问题就解决了session.get(Acteur.class, pkActeur)。我得到了我想要的对象演员。

我的问题是:为什么我在执行查询“Declaration_Acteur_Complet”时看不到对象参与者(在 DB 中)?是否涉及不止一项交易?session.get(...)和 和有什么不一样session.getNamedQuery(...)

谢谢你的帮助。