问题标签 [hibernate-5]

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 回答
2058 浏览

hibernate - 关于 EntityManagerFactory 和 SessionFactory 与 Hibernate 5.3、Spring Data JPA 2.1.4 和 Spring 5.1 的混淆

我试图找出集成 Hibernate 和 Spring Data JPA 的新机制。我按照https://www.baeldung.com/hibernate-5-spring上提供的示例进行操作,但无济于事。进一步的研究给我带来了Juergen Hoeller在 Github 上的一个问题,他说:

[...] 这涵盖了很多开始的基础:在 Hibernate 5.2 和 5.3 中,LocalSessionFactoryBean 和 HibernateTransactionManager 在许多场景中充当 LocalContainerEntityManagerFactoryBean 和 JpaTransactionManager 的 99% 兼容替代品,允许与 SessionFactory.getCurrentSession() 交互(还有 HibernateTemplate) 在同一本地事务中的 @PersistenceContext EntityManager 交互旁边 (#21454)。除此之外,这样的设置还提供了更强大的 Hibernate 集成(#21494、#20852)和更多的配置灵活性,不受 JPA 引导合同的限制。

LocalSessionFactoryBean类的相应 Javadoc说明:

从 Spring 5.1 开始,与 Hibernate 5.0/5.1 以及 5.2/5.3 兼容。使用 Hibernate 5.3 设置,LocalSessionFactoryBean 是 LocalContainerEntityManagerFactoryBean 的直接替代品,用于常见的 JPA 目的:特别是在 Hibernate 5.3 中,Hibernate SessionFactory 也将本机公开 JPA EntityManagerFactory 接口,并且 Hibernate BeanContainer 集成将开箱即用地注册。结合 HibernateTransactionManager,这自然允许在同一事务中混合 JPA 访问代码和本机 Hibernate 访问代码。

我使用 Spring Boot 2.1.2.RELEASE 实现了一个简单的示例项目。它提供了一个简单的配置(与上面的 Baeldung 示例相同)并连接到 PostgreSQL 数据库。此外,从理论上讲,它使用模型和存储库来处理数据。这些类看起来像这样:

DemoApplication.java

基本配置.java

模型.java

DemoRepository.java

一旦我添加了DemoRepository应用程序就不再启动,因为:

完整的错误信息:

我的印象是,SessionFactory现在正确实施并公开了,EntityManagerFactory但似乎并非如此。我很确定我的实现存在缺陷,并且来自 Baeldung 的示例实际上可以正常工作。我希望有人可以向我指出并帮助我理解我的错误。
提前感谢大家。

依赖项:

  • spring-data-jpa:2.1.4.RELEASE
  • 弹簧芯:5.1.4.RELEASE
  • spring-orm:5.1.4.RELEASE
  • 休眠核心:5.3.7.Final
  • 弹簧启动:2.1.2.RELEASE

gradle.build

0 投票
2 回答
715 浏览

java - 从 3.6 更新到 Hibernate 5.1 会产生传递给驱逐异常的非实体对象实例

我正在使用一个使用注解进行映射的hibernate 3.6项目,现在我将它迁移到hibernate 5.1,并且我将这个运行时异常 非实体对象实例传递给了evict 下面是对evict的调用

下面是引发异常的 DefaultEvictEventListener.class 的代码

在我的休眠 5.1 中,持久化器为空。如果不清楚,我可以提供更多详细信息

0 投票
1 回答
183 浏览

hibernate-5 - hibernate 5 HQL 中的日期函数

所以我对休眠有点陌生,因此请在这里忍受我。我有一个这样的mysql查询:

我正在尝试使用 hibernate 5 JPQL 查询来运行相同的操作。这是我尝试过的:

然而它抛出Unexpected token errors。有人介意解释我在这里做错了什么吗?谢谢一堆。

0 投票
0 回答
73 浏览

jpa-2.1 - 如何证明 JPA Enity 不能是 Hibernate 5 的最终类

JSR 338:Java TM持久性 API 2.1 规范 > 2.1 实体类指定:

实体类不能是最终的。实体类的任何方法或持久实例变量都不能是最终的。

因此,我尝试Hibernate 5.2.18.Final通过将实体类设置为来证明这一点final

但是结果出乎我的意料:可以生成对应的表,并且可以将新的实例City持久化到数据库中,也就是说我的代码证明了实体类可以final

问题:有没有更好的方法来证明实体类不能是最终的?这不是规范中的硬性规则吗?

0 投票
0 回答
351 浏览

database - org.springframework.dao.CannotAcquireLockException:无法执行语句

org.springframework.dao.CannotAcquireLockException:无法执行语句;SQL [不适用];嵌套异常是 org.hibernate.exception.LockAcquisitionException:无法执行语句

错误的完整堆栈跟踪

org.springframework.dao.CannotAcquireLockException:无法执行语句;SQL [不适用];嵌套异常是 org.hibernate.exception.LockAcquisitionException: could not execute statement at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:238) at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java :388) 在 org.springframework.orm.hibernate5.HibernateTemplate.flush(HibernateTemplate.java:809) 的 org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:347)

任何帮助如何解决这个问题?

0 投票
1 回答
31 浏览

hibernate - 如何在不需要迁移插件的情况下使用 Grails 4.0.5 (Hibernate 5) 在模式生成期间添加自定义数据库对象?

我需要添加一些作为系统架构设计一部分的函数和视图。这应该是会话启动的一部分(尤其是在开发和测试中),因为数据源上的 dbCreate create-drop 设置使得初始开发和测试环境最初设置一致且原始。

使用数据库迁移插件没有意义,因为这些是预定义的 db 对象,它们是整个系统设计的一部分,除非它们本身正在更改,否则它们不属于更改集。相当于要求我们在变更集中添加域表生成sql。如果它正在发生变化(这就是变更集的用途!),这是有道理的,但如果它只是最初创建的,那么它在概念上放置它的位置是错误的。

此外,我们不能使用迁移插件,因为我们的生产 QA 流程不允许这种方法(它是与项目源无关的外部流程,因此在多个项目中维护更改集没有意义)。

Hibernate 从 grails 域对象自动生成它的模式,我们有视图的 sql(依赖于域对象中的表)以及这些视图中使用的一些函数的 sql,我们只需要确定在哪里最好让 GORM / Hibernate 执行所述 sql,以便在生成模式时生成适当的 db 对象。

在 Grails 2.5.5 中,我使用自定义 GrailsAnnotationConfiguration 来挂钩模式生成过程。这不再是在 grails 4+ 中使用 Hibernate 5 的选项。

为了在不依赖数据库迁移插件的情况下添加自定义数据库对象(如函数和视图),与 Hibernate Schema 生成过程相关联的最佳方法是什么?

0 投票
0 回答
62 浏览

hibernate - 当所有人都拥有该实体(没有EntityManager / Session)时,如何锁定()JPA / Hibernate实体?

我正在处理一些遗留代码,这些代码在某些地方没有一种干净可靠的方式来获取给定实体的 JPA EntityManager(或 Hibernate Session),以根据需要调用 lock(...) 方法。本质上,我们在实体中有一个方法,需要执行以下操作:

问题是如何做到这一点 - 如何访问该实体管理器或会话?我们设计了两种方法来完成我们需要的事情,即使两者都有效,但没有一种是可取的:

选项 #1 - 令人尴尬的属性触发器

...“欺骗”Hibernate(我们使用字节码增强,顺便说一句)来执行锁定本身,然后撤消更改但保留锁定(我们会在任何“廉价”属性上执行此操作)。

选项 #2:不恰当地滥用 Hibernate 字节码增强及其内部 API 的反射

是否有适当、干净的方法来获取当前管理/拥有特定实体的 EntityManager / Session?当然,我们知道底层引擎必须已经知道这一点……但这似乎被很好地隐藏起来了。

附加说明:ThreadLocal 在某些项目中可能是一个答案,但在这个项目中不是。不要问。

0 投票
4 回答
256 浏览

java - java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:用户未映射

我知道这已经被问过很多次了,但到目前为止,没有一个答案能解决这个问题。

在我从Hibernate 4.3.11升级到Hibernate 5.2.0之前,我的代码多年来一直运行良好。现在我收到以下错误:

大多数答案是应该查询实体,而不是表,我确实这样做了。

用户类的代码:

用户的实体映射,为简洁起见省略了其他实体:

下面是查询代码:

有没有人有任何想法?我很绝望,我的工作几乎停顿了……

任何帮助将不胜感激!

更新:在这里,我按要求发布了 HibernateUtil 类:

0 投票
1 回答
83 浏览

java - Hibernate 对 JDBC 规范 4.3 的支持?

Hibernate ORM 5.4 的文档中,它声明系统要求至少需要Java 1.8 和 JDBC 4.2。

对于 6.0 版本的文档也可以找到相同的内容。

Hibernate 5.2 和更高版本至少需要 Java 1.8 和 JDBC 4.2

那么Hibernate ORM 5.4 是否支持JDBC 4.3 规范建议的更改)?有关系吗?我假设任何不受支持的方法调用只会抛出一个SQLFeatureNotSupportedException.

我只是找不到任何明确说明支持或不支持 JDBC 4.3并且需要清除的内容。

0 投票
0 回答
17 浏览

java - 升级到 Hibernate 5 时替换 addDocument(org.w3c.dom.Document doc)

我最近从 hibernate3 升级到 hibernate5 并且我有一段代码addDocument(org.w3c.dom.Document doc),其中使用了已弃用的方法。我想用 , 或 替换它addUrladdResourceaddFile我不知道该怎么做。

所以这是我的方法,而不是 configuration.addDocument(hibernateMappingDocument),我想使用 addUrl 或 addResource 或 addFile 之类的其他东西。