标签: sessionfactory

Spring-Hibernate:非法尝试将集合与两个打开的会话相关联

我正在尝试更新MySql Db中的记录.更新它时抛出以下异常

org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:410)
at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:43)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61)
at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:123)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:293)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
at com.tcs.ignite.ih.spring.dao.UserDAOImpl.saveUpdateUserbean(UserDAOImpl.java:185)
at com.tcs.ignite.ih.spring.dao.UserDAOImpl.blockuser(UserDAOImpl.java:204)
at com.tcs.ignite.ih.spring.service.UserServiceImpl.blockUser(UserServiceImpl.java:187)
at com.tcs.ignite.ih.spring.controller.AdminHomeController.BlockUser(AdminHomeController.java:48)
Run Code Online (Sandbox Code Playgroud)

我检查会议.它在每个方法的最后块中关闭.无法弄清楚出了什么问题.我能够使用其他方法insertupdate opertion没有任何问题,但只有saveUpdateUserBean方法抛出异常

在UserDAOImpl:

import com.tcs.ignite.ih.hibernate.model.Userdetails;
import com.tcs.ignite.ih.hibernate.model.Userlog;
import com.tcs.ignite.ih.hibernate.model.Userrole;
import com.tcs.ignite.ih.spring.bean.LoginBean;
import com.tcs.ignite.ih.spring.util.LogFile;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; …
Run Code Online (Sandbox Code Playgroud)

java annotations hibernate spring-mvc sessionfactory

10
推荐指数
2
解决办法
4万
查看次数

在Grails中如何在域类静态方法中访问hibernate会话?

我在网上看过各种各样的文章,但在这一点上它们似乎相当分散.在我的配置和我的方法中,我需要做什么才能获得hibernate会话.我正在尝试为存储过程进行一些直接的SQL调用.我有一个很大的代码库,我从Ruby移植了很多静态方法和存储过程调用.如果我需要使用sessionFactory,那么如何才能访问它?

grails hibernate sessionfactory

9
推荐指数
3
解决办法
2万
查看次数

Spring/Hibernate下的多个会话工厂

我有一个要求,我需要在同一个实例中支持多个数据库,以支持多租户.每个DB都具有相同的架构.用户通过从列表中选择登录到特定数据库,并且所有后续调用将转到该数据库,直到他们注销.

我想基于客户端提供的参数在单个HibernateDaoTemplate内热交换会话工厂.

我可以在热交换数据源(以及与之相关的所有事务问题)上找到很多东西,但我想热交换会话工厂 - 保留每个的所有缓存.

最简单的方法是什么?为DaoTemplate配置HotSwappableTarget?谁能指点我如何做到这一点?

spring hibernate sessionfactory

8
推荐指数
1
解决办法
1万
查看次数

带注释的Spring + Hibernate:没有Hibernate会话绑定到线程

我是Spring的新手,我正在尝试使用以下堆栈创建一个webapp:Apache Tomcat 7,MySQL,Spring MVC,带有JPA注释的Hibernate 3.

我正试图通过遵循Craig Walls的"Spring in Action,第三版"一书来学习.

首先,我想创建一个页面,显示我手动添加到我的数据库中的一些条目,但看起来我的应用程序无法从SessionFactory创建/检索任何Hibernate会话.这是我的根本原因堆栈跟踪:

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
    org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)
    com.nbarraille.www.dao.HibernateContactDAO.listContact(HibernateContactDAO.java:27)
    com.nbarraille.www.controllers.HomeController.showHomePage(HomeController.java:24)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:613)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Run Code Online (Sandbox Code Playgroud)

这是我关心的Classes/Config文件:

我的HibernateDAO:

@Repository
public …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate sessionfactory

8
推荐指数
1
解决办法
3万
查看次数

hibernate 4 sessionfactory packagestoscan属性用法

我们有一个基于Spring 3.2.4和Hibernate 4.2.3的Web应用程序.它是使用appfuse 2.2.1原型生成的.根据可用的文档,我们可以使用SessionFactory的packagesToScan属性来动态获取实体类并设置sessionFactory.但是,我们面临一个问题,我们必须在hibernate.cfg.xml中明确提到实体类名,以便hibernate识别它.我在论坛上找不到合适的答案,所以在这里发帖.可能我对其工作原理的理解可能不正确,因此欢迎使用任何指针.

谢谢

applicationContext.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans -- namespace declarations here
       default-lazy-init="true">
     <!-- Activates scanning of @Autowired -->
     <context:annotation-config/>
     <!-- Activates scanning of @Repository and @Service -->
     <context:component-scan base-package="com.xyz"/>
</beans>
Run Code Online (Sandbox Code Playgroud)

的hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 <hibernate-configuration>
    <session-factory>
       <mapping class="com.xyz.model.Address" />
       <mapping class="com.xyz.model.Company" />
       <mapping class="com.xyz.model.CompanyBilling" />
       <!-- BIG LIST OF MY ENTITY CLASSES -->
    </session-factory>
 </hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

的applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans -- namespace declarations here
      default-lazy-init="true">
    <bean class="org.springframework.orm.hibernate4.HibernateExceptionTranslator"/>
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    <!-- Hibernate SessionFactory …
Run Code Online (Sandbox Code Playgroud)

spring hibernate sessionfactory

8
推荐指数
1
解决办法
2万
查看次数

Hibernate升级到5.2 - 创建会话工厂并替换PersistentClass以获取实体类属性

我目前正在将我的Hibernate版本升级到最新版本5.2.10.我替换了HibernateUtil中的代码,用于创建SessionFactory.

4.3.11.Final(上一篇):

 public class HibernateUtil {
   private HibernateUtil() {}

   private static SessionFactory sessionFactory;

    private static Configuration configuration;

    public static Configuration getConfiguration() {
        return configuration;
    }
    private static SessionFactory buildSessionFactory() {
        try {
                     if(sessionFactory == null) {
                        configuration = new Configuration();
                        configuration.configure("hibernate.cfg.xml");
                        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                                .applySettings(configuration.getProperties()).build();
                        sessionFactory = configuration
                                .buildSessionFactory(serviceRegistry);
                     }
            return sessionFactory;
        }
        catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }

    }
    public static SessionFactory getSessionFactory() {
        return buildSessionFactory();
    }

    public static Session getSession() {
        Session hibernateSession …
Run Code Online (Sandbox Code Playgroud)

java migration hibernate sessionfactory

8
推荐指数
2
解决办法
5740
查看次数

Hibernate,SessionFactoryObjectFactory和OutOfMemoryError:java堆空间

在我工作的地方,我们遇到了JVM在我们的一个应用程序中耗尽堆空间的问题.我已经做了一些搜索导致这种情况的原因,包括使用分析器查看堆转储,但现在我几乎陷入困境.

首先,关于有问题的系统:它是一个使用Spring和Hibernate的Java应用程序来保存有关组织的记录.该系统由一组Web服务客户端组成,用于从负责此类数据的政府机构中检索有关组织的数据.此外,系统使用此类数据保留本地数据库,充当Web服务调用的缓存,以便第一次请求有关组织的信息,将其保存在本地关系数据库中,并将其用于检索以下请求的数据.Hibernate用于与此数据库通信.

如前所述,问题是在一段时间后,应用程序开始与OutOfMemoryError崩溃:java堆空间.我已经使用Eclipse + MAT查看了堆转储,并将罪魁祸首确定为Hibernate SessionFactoryObjectFactory,占用了大约85%的已分配内存(所有内存都保留了内存).我发现确切地确定在其中保留了什么类型的对象有点困难.在顶层有Glassfish WebappClassLoader,其中包含org.hibernate.impl.SessionFactoryObjectFactory.包含在这是一个org.hibernate.util.FastHashMap,其中包含一个java.util.HashMap.它包含许多条目,每个条目包含一个HashMap条目,一个org.hibernate.impl.SessionFactoryImpl和一个String.HashMap-entry依次包含相同的三个对象,一个HashMap-entry,一个SessionFactoryImpl和一个String,这个结构重复了很多次.该SessionFactoryImpls包含多个对象,最显着的org.hibernate.persister.entity.SingleTableEntityPersister,里面包含了一些字符串和HashMaps这样的.一些字符串引用域对象中的变量,一些字符串包含sql语句.

乍一看,这个对象占用了不必要的内存量(转储文件是800MB,其中650MB被占用SessionFactoryObjectFactory),所以我启用了对象加载和卸载的日志记录,并尝试向系统询问有关的数据.组织(通过来自其他系统的Web服务调用).我在这里注意到的是,有很多用于加载对象的消息,但很少有关于卸载对象的消息(唯一有卸载对象的对象).这让我相信,一旦一个对象(比如一个组织)被加载到内存中,它就永远不会被卸载,这意味着随着时间的推移,系统将耗尽内存.(这是基于日志中发现的内容的公平假设吗?)

然后,我试着找到原因,但这要困难得多.作为由Hibernate加载的对象将生活,只要他们的会话的生活,我试图改变会议分别处理的方式,通过更换调用Spring的HibernateDaoSupport#getSession(),对HibernateDaoSupport#getSessionFactory().getCurrentSession().这对问题没有任何影响.我也尝试添加对...的调用getCurrentSession().flush()以及.clear()一些Dao方法的finally块,也没有任何附加效果.(Dao方法都注释了@Transactional,这应该意味着会话应该只在@Transactional-method中存活,并且对方法的连续调用应该在调用getCurrentSession()(?)时获得不同的会话)

所以,现在我在提出其他领域进行检查时几乎陷入困境.有没有人有一个想法或一些关于在哪里寻找和寻找什么的指针?

堆转储显示有很多实例org.hibernate.impl.SessionFactoryImpl,这是否符合预期?(我原本以为应该只有一个SessionFactory实例,或者几个tops.)

编辑:

我想我实际上已经解决了这个问题:

事实证明,在webservice-classes中处理对其他对象的依赖是一个问题.这是通过ClassPathXmlApplicationContext(...)在webservice类的构造函数中调用new来解决的.这导致为每个请求(或至少每个会话)加载了很多对象,这些对象没有再次卸载(主要是Hibernate SessionFactoryImpl).我已经改变了webservice-classes,所以他们注入了他们的依赖,并形成了我迄今为止使用的探查器,多个SessionFactoryImpl对象的问题已经解决了.

我认为从GlassFish 2.x升级到GlassFish 3.x可能会使问题恶化,可能在如何实例化webservice-classes方面存在一些差异.

memory-leaks hibernate sessionfactory out-of-memory

7
推荐指数
1
解决办法
6930
查看次数

无法打开Hibernate Session进行事务/无法打开连接

在我的应用程序中,我有一个模块,用于在数据库中搜索用户并在jsp内的表中显示它们的信息.我只是在我的应用程序中设置Spring Security.我能够从登录页面建立与数据库的连接,但由于某种原因,我的DAO的CRUD操作(在这种情况下,搜索)都没有工作.

谢谢,如果我能提供更多信息,请告诉我.

这是我的大部分堆栈跟踪.

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656)
        org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

...

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
    org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
    org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    $Proxy8.searchEntity(Unknown Source)
    arlua.controller.SearchUserController.mySearchMethod(SearchUserController.java:35)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source

...

    org.hibernate.exception.GenericJDBCException: Cannot open connection
        org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
        org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
        org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
        org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
        org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
        org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:74)
        $Proxy14.getTransactionIsolation(Unknown Source)

...

    java.sql.SQLException: invalid …
Run Code Online (Sandbox Code Playgroud)

hibernate spring-mvc sessionfactory spring-security

7
推荐指数
1
解决办法
7万
查看次数

没有配置CurrentSessionContext

抱歉英语不好.我得到了我的项目spring-boot 1.1.8,Encountered Exception No CurrentSessionContext configured,然后我做了一些搜索,添加属性<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>可以解决这个问题,但是

如何使用java类配置此属性?

更新:我改为Hibernate4.x方式来定义SessionFactory但仍然遇到同样的错误,请帮忙!

使用java 1.8speing boot 1.1.8

这是我的pom.xml

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <main.basedir>${basedir}/../..</main.basedir>
        <m2eclipse.wtp.contextRoot>../</m2eclipse.wtp.contextRoot>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.1.8.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

这是我的服务和控制器

@AutoWried
SessionFactory sessionFactory;

@Service
@Transactional
public class UserServiceImpl implements UserService { …
Run Code Online (Sandbox Code Playgroud)

java sessionfactory spring-boot

7
推荐指数
2
解决办法
1万
查看次数

从hibernate配置创建EntityManagerFactory

在我们当前的应用程序(Java SE)中,我们使用Hibernate特定的API,但我们希望尽可能(但慢慢地)迁移到JPA.为此,我需要EntityManagerFactory而不是SessionFactory(我想保持这个公理没有争议).

问题出在哪里,目前我们的会话工厂正在创建org.hibernate.cfg.Configuration,我想暂时保留它 - 因为这个配置通过我们软件的不同部分传递,可以并且可以根据需要配置持久性.

所以问题是:我该怎么做

ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                                   .applySettings( hibConfiguration.getProperties() )
                                   .buildServiceRegistry();
SessionFactory sessionFactory = hibConfiguration.buildSessionFactory( serviceRegistry );
Run Code Online (Sandbox Code Playgroud)

相当于导致EntityManagerFactory

java hibernate jpa sessionfactory entitymanager

7
推荐指数
1
解决办法
5027
查看次数