问题标签 [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.
java - 休眠会话和线程安全
我试图理解“休眠会话不是线程安全的”的含义。我已经知道的(如果我错了,请纠正我):
- 非 JTA 环境中的会话保存在 Thread Local 中。所以它绑定到当前线程。
- 在新线程中调用 getCurrentSession() 会将新会话与其自己的本地线程相关联。
- 假设我们在 2 个线程(T1,T2)之间共享一个实体,在 T1 中加载并在 T2 中使用,我们可能会遇到延迟加载等问题,因为 T1 和 T2 中的会话不同。
这解释了在不同会话之间共享实体时可能出现的问题。
我无法理解的是在 2 个或更多线程之间共享 Session 时可能出现的问题。我知道 Session 中的方法不是线程安全的,并且可能导致竞争条件等,但不清楚如何?如果有人可以用示例进行解释或列出一个或多个场景以进行澄清,我将不胜感激。
提前致谢
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 升级问题吗?
在此先感谢您的帮助。
java - java.lang.NoClassDefFoundError:无法初始化类 DataLayer.HibernateAdapter
我已将我的 Java 项目(Web 服务)修改为动态 Web 模块。我使用 Tomcat 7.0.59 作为服务器。在启动服务器时,它正在启动,没有任何问题。但是,如果我尝试访问 Web 服务方法,那么我最终会收到错误消息:“无法初始化类 DataLayer.HibernateAdapter java.lang.NoClassDefFoundError: 无法初始化类 DataLayer.HibernateAdapter ”。任何人都请帮助我,而不仅仅是将其标记为“重复”。如果必须修改代码,请提供详细步骤。谢谢!!
控制台日志:
数据库上下文.java:
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 分配一个新的临时会话(在获取它时),但仍然没有运气(尽管会话工厂似乎在过滤器列表中有我的过滤器)。
任何帮助,将不胜感激。
更新好的我可以用“脏”的方式解决它:
OrderItem
Removable
用类似的方法实现我自己的接口isRemoved
- 在
orderItems
getter 调用通用过滤方法中迭代项目并过滤它们。缺点是我必须从数据库中加载所有对象 - 已删除而不是未删除。
更新LazyInitializationException
由于 sessionFactory Spring bean 配置属性,
我没有得到任何信息:
所以我猜:没有交易 - 没有会话 - 没有应用过滤器。
hibernate - 我的服务层上的交易
我有一个已标记的服务@Transactional
。唯一的问题是,我正在研究在调用 save 方法时需要提交对象的方法。
我已经从类级别中删除了注释,并将除我的之外的每个方法都标记为@Transactional
(DAO 也被标记@Transactional
)。我确实看到我的信息现在正在像我想要的那样立即保存,但是当我尝试执行 findBy 时,我得到了“线程中不存在会话”异常。
有谁知道这个问题以及如何解决它?
hibernate - 关闭 Hibernate 会话不会释放表上的锁定 - Hibernate,Derby
我正在尝试保存一个实体
此方法是从 Spring 事务上下文中调用的
事务开始并提交没有任何问题,但问题是即使在 Hibernate 会话关闭后创建的锁仍未释放,当我想从该表中选择数据时会导致问题
我正在使用 Spring 4.0.1.、Hibernate 4、Derby 10.10.1.1。
Hibernate 会话关闭是否释放锁?它是如何工作的?是spring事务上下文的问题吗?
java - Hibernate 生成的 Id 不一致
我有一个主要方法,它顺序调用两个 Web 服务。第一个 Web 服务首先将数据插入到请求表中,该请求表具有使用休眠顺序生成的主键。该表还有一个状态字段,其初始状态为“已接收”。然后这是第一个 Web 服务,处理此请求,然后将状态更改为“已处理”。
现在主方法调用第二个 Web 服务来获取状态为“已处理”的请求。由于 main 方法的调用是顺序的,因此第二个 Web 服务调用中只能有一个状态为“已处理”的条目。在此之后,主方法休眠 5 秒并无限重复处理。此外,当我获取此记录时,我将状态更改为“已完成”。
此外,Web 服务正在远程访问数据库。数据还包含一个 requestId(这不是主键)。
所以问题是当这个过程持续 1 小时时,我发现我发送和接收的 requestId 存在一些不一致。这些 ID 不匹配。而且我可以看到有多个条目的状态仍然存在Processed
。我使用休眠 id 生成器作为增量,但是在多个集群中测试这个系统时,我遇到了 uniqueConstraint 异常。所以我开始使用序列生成器,现在面临这个问题。
提交后是否需要使用刷新?
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,无法初始化代理 - 无会话”
任何想法为什么?
java - Hibernate Session 实践
我正在处理应用程序使用数据库中的某些配置的任务。配置存储在 java 持久对象中。在服务器启动时,会创建 Hibernate 会话,并将所有配置数据加载到具有延迟加载选项的对象中。并发用户请求使用相同的对象。
配置数据的结构:
工作流程:
为了。例如。Person person 是一个休眠的实体。(java 持久化 obj。)
person 对象在服务器启动时加载了休眠获取列表调用。只有一个 sessionfactory 和 session 被初始化。DAO 只接听电话。
在随后的服务器请求中,访问人员对象的属性。
一般来说,我不确定此设置如何适用于多个并行服务器请求。
1) 长时间保持会话开放;它会引起任何问题吗?2)这是一个好习惯吗?我知道会话应该在每次 CRUD 操作后关闭。但特别是对于上述工作流程,正确的方法应该是什么。3)多个服务器请求可以访问同一个持久实体吗?(只接电话)
寻找一些指导和帮助。与设计和性能相关的任何输入。
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(...)
?
谢谢你的帮助。