问题标签 [hibernate-4.x]
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 - 我正在使用 jdbc &hibernate 连接我的数据库 oracle11gr2。我需要将客户端库从 hibernate 3.1.3 升级到 4.1.6
我需要将我的客户端库(即休眠)从 3.1.3 升级到 4.x 我更喜欢 4.1.6。我已经成功地将 jdbc 4 升级到 5。现在问题是我们要从 3.1.6 升级到最新版本。我看到超过 250 个错误。我在添加 jars 时有点困惑。我从 4.1.6 添加了所需的文件夹。可以让我知道我应该在所需文件夹中添加所有 jars 还是只替换我的 jars图书馆
替换:
antlr、commons-collections、dom4j、hibernate jar。
我已经尝试了两种方法来添加所有必需的 jars 文件夹,并且只是替换了与我的库和 4.1.6 相同的 jars。在这两种情况下,我都会遇到相同的错误。
谢谢你的回复
java - Hibernate 4.1 错误:无法为类型创建 DynamicParameterizedType:org.hibernate.type.EnumType
我正在尝试将我的项目从休眠 3.6 升级到 4.1.6,我想我已经把所有的罐子都放在了正确的位置,等等,但现在我在谷歌搜索下面有这个异常没有得到答案。我的代码在 Hibernate 3.6 上运行良好,我不确定这是我的映射问题还是其他问题。我正在使用 JPA 方法使用 Spring 3.1.2 配置休眠 4.1。
更新:我在休眠代码中设置了断点,该异常被捕获并找到了它不喜欢的映射,下面是它。
hibernate - 使用和不使用 JNDI 的休眠
我在 Tomcat 7 中成功使用了 Hibernate 4。我现在需要创建一个也使用 Hibernate 的独立应用程序,并将利用我在 Tomcat 应用程序中使用的 Hibernate 代码。
Hibernate 配置当前使用 JNDI 和 Tomcat。
由于 Hibernate 自动生成生成的代码,看起来它需要 JNDI 才能工作(这里是 XXXXHome 类之一的片段:
任何人都知道如何在独立环境中使用这些自动生成的 Hibernate 类?
spring-mvc - Spring+Hibernate:在线程中找不到会话
我制作了一个基于 Maven+Spring 3.1+Spring MVC 3.1+Hibernate 4.1 的项目,如果我使用代码,则在事务中:
它在 getCurrentSession() 处给出了异常:
但是如果我使用 openSession 而不是 getCurrentSession 没有异常并且代码事务成功完成:
是什么原因?谢谢您的帮助
我的 applicationContext.xml:
servlet-context.xml:
我的服务代码:
我的 DAO 代码:
spring - 休眠问题
嗨,我正在尝试坚持一个简单的实体。如果我从 hibernate.cfg.xml 文件中删除映射标记,我不会得到异常。有什么问题?
…………
…………
spring-mvc - OpenSessionInView 工作但不为@Transactional 提供其会话
我正在尝试使用 Spring MVC 3 和 Hibernate 4.1 来获得声明式事务管理,为整个请求长度提供一个开放会话。我只有一个用于数据访问的“管理器”层,它直接使用会话。这是用@Transactional 注释的,并且会话在退出该层时关闭,并且我在控制器中得到一个延迟加载异常。
因此,我添加了 OpenSessionInViewFilter 过滤器,并且日志表明此过滤器已正确配置,并且它们还显示此过滤器正在打开会话。不幸的是,我的管理层仍然像以前一样打开和关闭自己的会话,并且我在控制器中得到了相同的延迟加载异常。
编辑:注意到在我的日志中,我打开了过滤器会话,打开了 HibernateTransactionManager 会话,关闭了 HibernateTransactionManager 会话,延迟加载异常,然后关闭了过滤器会话。所以我知道在延迟加载异常期间某处有一个打开的会话,但是该对象是在与另一个关闭的会话关联的事务中加载的。
我认为从管理器类中删除 @Transactional 会从该层删除会话管理并让过滤器完成它的工作,但是 sessionFactory().getCurrentSession() 只是获得一个关闭的会话;它无权访问过滤器提供的打开会话。
如何访问 OpenSessionInViewFilter 的明确打开的会话?
springapp-servlet.xml
web.xml
休眠上下文.xml
管理器.java
控制器.java
我的异常发生在控制器中,在读取管理器类中加载并传递给该控制器的对象的第一个属性时:
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.hibernate.LazyInitializationException: 无法初始化代理 - 没有会话 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java: 778)javax.servlet.http.HttpServlet.service(HttpServlet.java:617)javax.servlet.http.HttpServlet.service(HttpServlet.java:717) java:119) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
我已经研究了好几个小时了..我所能找到的只是使用休眠 3 的解决方案和对休眠 4 会话/事务理论的粗略解释,没有示例。
有什么想法吗?
更新:已修复!
发现这个:
Spring MVC OpenSessionInViewInterceptor 不工作
不幸的是,这并没有帮助那里的 OP,但它帮助了我。值得注意的是,这:
“最好不要在 dispatcher-servlet.xml 中导入 applicationContext.xml,而是使用 ContextLoaderListener 加载它”
其中,应用于我的配置,正是我在上面发布的所有内容,但不是
在我的 springapp-servlet.xml 中,我将 ContextLoaderListener 修改为:
这就是全部
将 OSIV 创建的会话返回给我。而且,事实上,正在创建的第二个会话不再是,因为我发现了这些可爱的小日志行:
这表明,在我的 @Transactional 服务层之外,OSIV 创建的会话还活着并且运行良好,并且只是为它启动了一个新事务。
希望这对其他人有帮助。我什至不想考虑我花了多少时间在这上面工作。
configuration - Spring 3.1 + hibernate 4:无法运行
我尝试了不同的配置,但没有效果。错误保持不变。这里是从 BoneCPs 网站获取的所需配置:
以及包含自动装配会话工厂的代码:
尝试创建新实体(代码段的最后一行)时出现错误:
我收到 NullPointerException:
也许我误解了 autowired 的含义?我认为该属性将自动设置。所以我尝试了以下操作:
这会导致以下错误:
我查看了大量的教程,但它们都忽略了看似基本的东西让事情运行起来,例如。ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); 没有出现在任何 spring + hibernate 教程中。有人能指点我一个完整的教程吗 (是的,现在变得非常沮丧。老实说,如果我使用普通的 jdbc,我会在几个小时前启动并运行)
现在,我怎样才能让它运行?自动接线如何工作?
编辑:通过“已接受答案”的帮助找到的解决方案:
新的 Spring 配置文件:
我不得不添加
到文件并在 sessionFactory 配置中声明带注释的实体类:
我不得不取消注释事务管理器部分,因此将数据源配置更改为我使用的配置不起作用(需要数据源)。
我还必须添加
到 AbstractHibernateDAO。我正在考虑写一篇博客文章并在这里建立一个链接。对于完全不熟悉 Spring 和 hibernate 的任何人来说,这将非常有用。
spring - 如何在hibernate4 + spring的第二个sessionFactory上公开TransactionAware?
下面的测试在我的 Hibernate3 应用程序中运行。当我将它升级到hibernate4时,它开始失败。
这是失败的:
org.hibernate.HibernateException:在 org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:881) 的 org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) 中找不到当前线程的会话
我的应用程序中有 2 个不同的会话工厂:sessionFactory 和 auditFactory。两者都在 spring 中配置(参见 [1])。
问题是在 hibernate4 配置中,属性exposeTransactionAwareSessionFactory 被删除了。我为我的auditFactory 设置为true。我相信删除此属性会使注入的 auditFactory 无法在事务中获取会话(因为 txManger 是为 sessionFactory 配置的),因此会产生错误。
问题:
- 我怎样才能让 auditFactory 在这个测试中拥有由 spring 管理的事务?
- 这是hibernate 3中的exposeTransactionAwareSessionFactory属性发生的事情吗?
我看到的唯一替代方法是将所有使用 auditFactory 的代码包装在一个用 @Transactional(otherTxManager) 注释的 Helper 类中。我确实尝试过,但在那里我遇到了一些额外的问题:
- 我需要使用一个单独的数据源(否则我会得到 [2])
- 使用 2 个单独的数据源,我会在 Cucumber 测试中遇到类似的错误,现在与 transactionManager [3] 相关
[1] 相关的 XML 配置:
[2] 两个工厂使用相同数据源的问题:
org.springframework.transaction.IllegalTransactionStateException:找到预绑定的 JDBC 连接!如果被告知要管理 DataSource 本身,HibernateTransactionManager 不支持在 DataSourceTransactionManager 中运行。建议对单个 DataSource 上的所有事务使用单个 HibernateTransactionManager,无论是 Hibernate 还是 JDBC 访问。在 org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:329)
[3] 由于声明了 2 个事务管理器而导致的黄瓜测试问题:
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [org.springframework.transaction.PlatformTransactionManager] 的唯一 bean:预期单个 bean,但找到 2:txAudit,txManager
java - Java:更新信息的最佳实践
我有一个使用 Hibernate 连接到 SQL 数据库的应用程序。从应用程序的特定部分删除一个人时,我想重置在特定部分中设置的所有信息。下面是我正在谈论的一个例子
从这个阶段删除一个人时,重置所有信息的最佳方法是什么
或者
还是有更好的方法来做到这一点?
sql-server-2008 - 使用 JTA TransactionManager 的 Spring3+Hibernate4 中的“No Session found for current thread”
我正在尝试从
春季 1.2.9 与休眠 3.2.0.ga
至
spring 3.1.1.RELEASE with hibernate 4.0.1.Final
大多数bean 的连接都是用 xml而不是注解完成的。在部署之前,我已经对 dao、service 和 controller 对象进行了必要的更改以及单元测试,以确保现有 spring 配置的兼容性。
当我部署到 JBoss AS 7.1.1.Final 时,我得到“No Session found for current thread”。我一直在通过这个论坛和 spring 和 hibernate 文档寻找答案,但我仍然无法找到适用于我的问题的解决方案。
这是休眠异常日志
这是会话工厂和事务管理器的spring配置(这里使用jta)
这是相关 dao 和服务对象的 spring 配置(它为每个服务对象使用 TransactionProxyFactoryBean)
我在配置中真正错过了什么?
==========================
[更新 - 20121101]
我接受了@adrian-shum 的建议,并与我在网上找到的一些信息进行了交叉参考。
我做了以下测试,但所有测试都不起作用,除非我切换到 HibernateTransaction 而不是 JTA 事务。
测试 1 - 成功
(使用 HibernateTransactionManager)
测试 2 - 失败
(使用 JtaTransactionManager - hibernate.transaction.manager_lookup_class + hibernate.transaction.factory_class)
测试 3 - 失败
(使用 JtaTransactionManager - hibernate.transaction.jta.platform 属性)
使用 Hibernate Transaction 对我来说不是一个选项。为了使 JTA 事务正常工作,我需要在 JBoss AS 7 方面做些什么吗?
==========================
[更新 - 20121101]
基本上,除了我之前发布的异常之外,我没有从日志中找到任何其他异常。
但是,有趣的是,我没有看到任何日志条目显示事务管理器与我指定的 JNDI 的绑定,并且它总是说它将使用“HHH000399:使用默认事务策略(直接 JDBC 事务)”
不确定这是否是原因...如果是,那我需要做什么?
==========================
[更新 - 20130425]
我怀疑这可能与未配置 XA 数据源有关。我会测试并确认。
如果有人能启发我可能是什么原因,我仍然很感激。
[更新 - 20130426]
我已经按如下方式配置了 XA 数据源,但我仍然遇到同样的错误。我尝试过的另一件事是升级以使用休眠 4.2,但我仍然遇到同样的错误。
有没有人尝试使用 JBoss7.1.1.final+Spring3.1.1.RELEASE+Hibernate4.0.1.Final+MS SQL server 2008 配置全局 JTA 事务支持?