问题标签 [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 投票
0 回答
395 浏览

java - 使用 Spring MVC 应用程序保持打开 Hibernate 会话

invalid property exception当我试图在我的表单对象中绑定我的模型对象中的集合时,我得到了一个。我正在尝试一些技巧,现在我认为问题在于 spring MVC 的休眠会话,所以在控制器中我编辑了 create 函数,以便在我的表单保存之前,我尝试获取会话并获取 typesite 的列表,但仍然得到相同的错误:

我的映射有问题吗?

Sites.java 映射

TypeSites.java 映射:

控制器类:

Angularjs 代码:

JSP:在这里我调用另一个角度控制器来获取选择上的类型站点列表

我在浏览器中提交之前有这个:

typesites.typeSite问题是:如果我将 select 的值更改为而不是typesites这样,我无法提交嵌套对象

提交工作正常,但我有两个插入:表中的插入,以及具有新外键typesite 的表中的插入。site

0 投票
1 回答
1597 浏览

java - 为什么 session.refresh(Object, LockMode.UPGRADE) 在休眠中被弃用?

我的要求:

我将 Quartzcron用于触发目的,许多触发器在同一行上运行,但基于不同的列。所以当触发器需要更新其相关列时。触发首先从数据库中刷新(Session.refresh(object))属于它的对象(在触发器开始时选择对象),然后UPGRADE LOCK在行级别获取。如果获得锁定成功,则更新列并用于session.update(object)在数据库中更新。并释放锁。

session.refresh(Object, LockMode.UPGRADE)使用 hibernate 避免脏更新的替代方法和有效方法是什么?

为什么它在 hibernate 中被弃用?

0 投票
0 回答
71 浏览

hibernate - 为什么 session.get(...) 解决 org.hibernate.NonUniqueObjectException?

我正在使用 Hibernate 4 Struts2 来尝试删除实体,引发以下异常:

我正在阅读,我以为我理解了这个问题,实际上这个异常非常具有描述性;会话中有多个具有相同标识符的对象,这是有问题的,因为 Hibernate 对给定主题执行事务,并且在某些时候来自我的两个对象的信息将不一致。我认为 hibernate 说“嘿,我在会话中有一个具有此 ID 的对象,但不是我给你的对象。”

我检查了我的代码并理解了问题,但是,在一篇文章中,我读到在尝试删除之前获取对象解决了问题,而且确实如此。我不明白为什么要解决这个问题,所以我想我还没有理解异常的原因。

我认为 session.get(...) 返回之前提取的对象,但我不确定。

方法是:

如果我取消注释该行并尝试删除返回 Session.get (...) 的对象,则不再发生异常。为什么?谢谢。

0 投票
1 回答
276 浏览

hibernate - Spring mvc 与 hibernate 和 jackson-hibernate-mapper 的集成测试:非法尝试将集合与两个会话相关联

异常“非法尝试将集合与两个会话关联”是众所周知的,并且当在两个不同的会话中引用同一实体时会发生这种情况。我有一个 spring mvc 集成测试,它发生在哪里,需要一个建议如何使它正常工作。

另外值得注意的是,我正在使用https://github.com/FasterXML/jackson-datatype-hibernate,这有助于在将域对象转换为 json 时避免 LazyInitializationException。我的猜测是它在内部打开 Hibernate 会话以获取惰性关系。

这是一个测试:

我的例外是:

那么,除了避免使用 jackson-hibernate-mapper 进行测试外,有什么方法可以避免这个问题?使用 DTO 和 Dozer 代替域对象不被视为解决方案(它将在未来完成,但不是现在)。

提前致谢

0 投票
1 回答
5290 浏览

java - Hibernate - 第二个查询给出了未知的服务请求

我试图更好地理解 Hibernate 是如何工作的......

我有一个无法解决的问题。

当应用程序启动时,它会进行查询

最后我关闭当前会话。

然后,在它之后,我要完成第二个查询:

我打开一个新会话(第一个会话用方法关闭HibernateUtil.shutdown();

但我得到了,现在,

我不明白为什么,我关闭了第一个会话,然后又打开了一个新会话..

在每个查询上关闭会话是否正确

编辑 我正在尝试解决这个问题,但没有结果。

现在我有了第一个选择查询,一切顺利。它在应用程序启动时。

我不提交或刷新它。然后,使用应用程序,我有第二个查询,所以我 getCurrentSession 并尝试进行选择

应用程序停止,没有任何结果,我也不知道发生了什么,因为我无法设置休眠以使用 pi4j 登录...我使用休眠会话的方式有什么问题吗?

0 投票
0 回答
425 浏览

java - 事件发生时空指针异常

发生预定计时器事件时的异常.....当我使用 SetEvent se = new SetEvent(); se.startArchiveEvent(); 然后我得到以下异常....

以下是相关类

归档事件.java

设置事件.java

AbstractDao.java

0 投票
1 回答
661 浏览

json - Grails 3.1 json 渲染

我刚刚将我的应用程序从 grails 3.0.13 升级到 grails 3.1.1。在这样做的过程中,我遇到了一个关于 JSON 渲染的有趣问题。

我一直在使用自定义 JSON 封送拆收器:

当我尝试在 grails 3.1.1 中使用它时,我收到以下错误:

它发生在约会.resource?.name 行上。我尝试了不同的方法来解决这个问题,并成功地解决了一个用例,但现在我在另一个地方遇到了同样的错误。到处改变这一点似乎是错误的做法。

在我的域类中,我声明了这样的关系:

所以我认为我应该急切地加载资源和客户字段?(我以前在 grails 3.0.14 用户“客户懒惰:假”中,它工作。

但是,它现在不起作用。那么在 gorm 5 中会话的工作方式是否发生了变化?我需要做什么才能继续在 json 渲染中使用关系?

0 投票
0 回答
412 浏览

java - 休眠,更新包含集合的对象而不加载集合

我有一个项目,其中包含一组列,其中包含一组包含一组 TaskAssigness 的任务。

我正在尝试更新列标题而无需加载其任务集,但出现以下错误:

我有以下 hbm.xml :

项目.hbm.xml:

列.hbm.xml:

任务.hbm.xml:

TaskAsignee.hbm.xml:

我正在尝试以这种方式更新列的标题:

如果该列不包含任何任务,这可以正常工作。如果我尝试更新包含任务的列,则会收到以下错误消息:

如果我在更新项目之前获得任务和任务分配,我没有错误:

有没有办法更改我的列标题,然后更新项目而无需获取任务和任务分配者?我可以告诉休眠只是更新列而不是尝试更进一步。

0 投票
1 回答
1363 浏览

java - 我应该在调用 session.evict(obj) 之前提交休眠事务吗

保存后何时应在休眠状态下提交事务。是在我调用 session.evict(obj) 之前还是之后。目前我的代码看起来像这样(只有必需的部分)。

有时,如果我在驱逐后提交,数据不会保存在数据库中。这是正确的编码方式吗?

0 投票
1 回答
677 浏览

hibernate - 使用 Session.buildLockRequest() 将实体重新附加到 EntityManager 是一种实用的解决方案吗?

我的问题比较简单:

我有一个实体,其中包含许多我不需要的懒加载集。现在我不想急切地加载所有内容,也不想拥有几种不同的 getSlimEntity()、getFullEntity()、getEntityForSpecialOccasion() 方法。

我想做的是默认使用“slim”版本,然后按需加载惰性内容。这种需求可能源于更改网页上显示“任务”实体的选项卡。新选项卡应显示任务的历史记录。但是,此选项卡不经常使用,因此我不急切地想要数据。

解决方案应该尽可能少地对数据库进行操作,因为数据库性能对我们来说是个问题。

我想出的一个可能的解决方案是使用 Session.buildLockRequest() 将任务“重新附加”到 EntityManager 并在我需要的 Set 上调用 Hibernate.initialize()。它看起来像这样:

这是一个苗条且相对易于理解的解决方案,数据库也没有更新或任何东西,只是查询有问题的 HistoryEntries。

现在我的问题是:这个解决方案可以使用吗?它会带来我看不到的任何问题吗?调用 buildLockRequest 实际发生了什么?另外,当多个用户查看同一个任务时会不会有问题?

// 编辑:正如所指出的,此解决方案使用可能与其他持久性提供程序不兼容的 Hibernate 特定调用,例如 EclipseLink 或 OpenJPA。由于这个项目只是内部的,这应该不是问题。