问题标签 [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 回答
8194 浏览

java - 休眠 session.get 返回 null

我有这样的代码:

第一行返回 null。
第二个返回有效记录。

但如果我换个地方:

两行都返回正确的结果:

这是我的休眠会话工厂:

为什么session.get(User.class, (long) 10))返回 null ?

更新 休眠配置:

用户.java

来自基本实体的 ID 字段

更新 2 问题出在映射文件中@JoinColumn(name = "Role", nullable = false) private Roles role;,我已指定角色不能为空,并且我尝试使用 id 10 检索的记录具有空角色外键。所以我改变 nullable = true并且它起作用了。

0 投票
1 回答
753 浏览

java - Hibernate 自动版本控制不起作用(使用 Spring)

我正在尝试使用 Hibernate 的自动版本控制,但是当调用 Session 的更新方法 f 时,我看不到查询的 where 子句中的版本字段,也没有在数据库中增加版本。我可能在做一些根本错误的事情,但是什么?调用 sesssionFactory 的 getCurrentSession 有问题吗?

我有以下实体类:

我的控制器:

我在哪里检索 DsXCT_Recalls 的集合并将它们展示给用户。集合存储在控制器中。然后,用户更改一个或多个实体的状态,我调用了recallManager 的saveRecalls 方法,该方法创建了一个仅包含已更改实体的列表(与存储在控制器中的集合相比)。

召回管理器(服务层)是:

我的 DAO 的 saveAll 方法通过实体更改调用休眠会话的一种更新方法:

0 投票
1 回答
2238 浏览

spring - getcurrentsession 中的空指针异常

我正在尝试将 Hibernate 4.1 与 Spring 3.1.3 集成。

这是我的模型课

以下是我的 DAO 课程

我的表有三列 ID,名字,姓氏

这是主类(Client.java)

现在我的问题是,每当我尝试执行 client.java 时,我都会在

EmployeeDAO 类。

现在我的表是空的,我正在尝试在其中添加一条记录。我不知道我所犯的确切错误是什么。我相信应该有一个愚蠢的。有人可以对此有所了解。谢谢您的帮助!

0 投票
1 回答
2350 浏览

hibernate - hibernate命名查询xml映射

如果我<query..>在我的 Car.hbm.xml 中放入 a,那么我返回的会话(Session) HibernateUtil.getSessionFactory().getCurrentSession();为空,如果我从我的 xml 映射文件中删除查询,则会话不再为空。为什么我会收到此错误?我真的被这种问题困住了。

我得到了这个 xml 映射:

这就是我要调用命名查询的地方:

0 投票
1 回答
1025 浏览

java - Hibernate:是否可以在事务提交时进行自动会话清除?

我有很多单独的函数,我必须在每个函数的 transaction.commit() 上执行 session.clear() 以释放内存。

我可能错了,但我认为,默认情况下,在 transaction.commit() 上不会调用休眠中的 session.clear()。

我想知道是否有任何方法可以配置休眠以在每个 transaction.commit() 上执行自动会话清除,而无需执行 session.clear()?

对上述问题的任何其他解决方案将不胜感激。

0 投票
1 回答
260 浏览

hibernate - 休眠会话模式默认设置为手动

我有简单的 Spring MVC - Hibernate 应用程序,在连接到 MySQL 5.5 数据库时工作正常(插入和读取数据)。在将同一应用程序连接到 Oracle 10g 时,它从数据库中读取记录,但无法插入记录。

在调试时,我发现会话的flushMode 是MANUAL。保存记录后,我显式编写了 session.flush(),代码开始在两个数据库中正常工作。

我的问题- 正如我从 Hibernate 的文档中了解到的那样,默认的刷新模式是 AUTO。我没有在我的代码中将其设置为手动,但不知何故它正在设置。如何控制这个?

我正在使用 Spring 3.1.1 和 Hibernate 3.5.6。下面是我的 root-context.xml 和 servlet-context.xml 文件。

servlet-context.xml:

根上下文.xml:

如果需要更多详细信息,请告诉我。

谢谢。

0 投票
1 回答
284 浏览

spring - Spring 上下文刷新使 Hibernate 会话抛出此异常:No Session found for current thread

我正在开发一个具有多个弹簧上下文的 Web 应用程序。它有一个主上下文,包含业务逻辑、休眠会话和应用程序的核心需求,其他上下文用于 spring mvc 绑定。通常应用程序工作正常,一切正常,但是当我刷新主上下文并尝试从其他上下文访问休眠会话时,休眠会话会抛出此异常:

但有趣的是应用程序可以启动启动,包括从数据库中选择大量数据。

有没有一种方法可以让我安全地刷新 spring 上下文?

PS:我可以毫无问题地获得其他弹簧上下文对象。在我刷新主上下文之前,应用程序可以在多个上下文中正常工作。我尝试在主上下文之后刷新 mvc 上下文,我从中调用休眠会话。在那个 mvc 上下文中仍然是同样的例外。

0 投票
0 回答
13483 浏览

hibernate - session.close() 连接后仍然与数据库处于活动状态

我正在使用swing和hibernate。现在对于检索连接,我正在使用sessionFactory.openSession(). 完成数据库活动后,我将关闭同一会话session.close()。现在的问题是,当我继续使用我的应用程序时,经过一些调用,应用程序抛出异常

在使用应用程序时,我使用以下查询监控活动数据库连接

我知道连接数正在增加,并且在一些连接后数据库停止提供新的连接数。

我不知道如何使用休眠关闭与数据库的连接,因为session.close()这样做没有用。

0 投票
2 回答
26475 浏览

hibernate - 如何正确关闭和打开 Hibernate 会话?

我有以下方法,每隔几秒插入大量记录。运行一段时间后,我收到如下错误:

错误:通信链路故障

从服务器成功接收到的最后一个数据包是 523 毫秒前。最后一个成功发送到服务器的数据包是在 8 毫秒前。

2013 年 5 月 16 日上午 9:48:30 com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO:签入语句有问题,正在丢弃。

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:语句关闭后不允许任何操作。


我用来打开和关闭连接的代码如下:


我也在使用 c3p0 连接池。我的配置如下:


我是否错误地打开和关闭连接?请让我知道我可以更改什么来停止接收此错误并停止我的程序。

0 投票
4 回答
40105 浏览

java - 如何在活动的 Spring 事务中将数据刷新到数据库中?

我想使用弹簧测试框架测试休眠会话的 save() 方法。@Test 方法是:

我想将用户刷新到数据库中。我希望我的用户在这种方法之后进入数据库

然后我想使用 spring 数据框架进入数据库并通过下一行获取这个保存的用户:

我尝试使用休眠刷新方法,例如:

它不会将我的用户刷新到数据库中!但是,如果我不使用 @Transactional spring 注释并将我的用户保存在程序化 spring 事务中,我将实现我想要的。不幸的是,保存到数据库中的用户没有回滚,因为没有弹簧@Transactional。因此,我的测试方法改变了后续测试方法的数据库和行为。

所以我需要将我的用户刷新到测试方法内的数据库中(而不是最后),并在测试方法结束时回滚对数据库的所有更改。

更新建议准备方法如下:

并且在 testSave 中调用 doSave 什么也不做。执行此方法后,我在 db 中仍然没有用户。我设置断点并从命令行检查我的数据库。

更新非常感谢您的回复。问题是方法 flush() 没有将我的用户放入数据库。我尝试了 Isolation.READ_UNCOMMITTED 并且它没有将我的用户放入数据库。我可以实现我想要的,但前提是我关闭 @Test 方法上的 spring 事务并保存编程事务。但是,@Test 方法不会回滚,将保存的用户留给后续的@Test 方法。这里@Test 方法保存用户不像@Test 方法删除用户那样危险,因为它没有回滚。所以必须有对@Test 方法的spring 事务支持,我无论如何都不能将我的用户(或删除)放入数据库中。实际上,只有在 @Test 方法结束并且 @Test 方法的事务被提交后,用户才被放入(或删除)到数据库中。所以我想将我的用户保存到@Test方法中间的db中,并在@Test方法结束时回滚它

谢谢!