标签: sessionfactory

Hibernate SessionFactory与EntityManagerFactory

我是Hibernate的新手,不知道是否要使用SessionFactoryEntityManagerFactory获取hibernate会话.两者有什么区别?优点缺点?

java hibernate jpa sessionfactory hibernate-entitymanager

234
推荐指数
5
解决办法
12万
查看次数

Spring和hibernate:找不到当前线程的Session

我得到以下错误

org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1024)
at com.fexco.shoptaxfreemobile.service.ProfileService.registerVisitor(ProfileService.java:57)
at com.fexco.shoptaxfreemobile.controller.ProfileController.registerVisitor(ProfileController.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.fexco.shoptaxfreemobile.jsonp.JsonpCallbackFilter.doFilter(JsonpCallbackFilter.java:33)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at …
Run Code Online (Sandbox Code Playgroud)

spring hibernate sessionfactory

23
推荐指数
3
解决办法
6万
查看次数

java.lang.IllegalArgumentException:期待IdClass映射

我已为我的实体配置了复合主键,Employee如下所示

Employee.java:

@Entity
@Table(name="employee")
@Proxy(lazy=false)
@IdClass(EmployeeId.class)
public class Employee implements Serializable {
    private static final long serialVersionUID = 1L;

    private EmployeeId employeeId;
    private Person person;
    private Branch branch;
    private boolean isActive;

    public Employee() {

    }    

    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name="person", column = @Column(name="person_id")),
        @AttributeOverride(name="branch", column = @Column(name="branch_id"))})

    public EmployeeId getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(EmployeeId employeeId) {
        this.employeeId = employeeId;
    }

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="person_id")
    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person; …
Run Code Online (Sandbox Code Playgroud)

java sessionfactory spring-orm spring-4 hibernate-5.x

23
推荐指数
2
解决办法
9119
查看次数

在创建Hibernate SessionFactory时如何设置Datasource?

我正在创建SessionFactory,我将我的数据源作为对象在我正在创建SessionFactory的代码中,但是我无法将数据源设置为Hibernate Configuration对象.那么如何将我的数据源设置为SessionFactory?

Configuration configuration = new Configuration();
Properties properties = new Properties();
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
configuration.setProperties(properties);
configuration.setProperty("packagesToScan", "com.my.app");
SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
Run Code Online (Sandbox Code Playgroud)

java hibernate sessionfactory

19
推荐指数
2
解决办法
5万
查看次数

确保NHibernate SessionFactory仅创建一次

我编写了一个NHibernateSessionFactory类,它包含一个静态的Nhibernate ISessionFactory.这用于确保我们只有一个会话工厂,并且第一次调用OpenSession()我创建了一个实际的SessionFactory - 下次我使用相同的并打开一个会话.代码如下所示:

public class NhibernateSessionFactory : INhibernateSessionFactory
{
    private static ISessionFactory _sessionFactory;

    public ISession OpenSession()
    {
        if (_sessionFactory == null)
        {
            var cfg = Fluently.Configure().
                Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("Foo.db")).
                Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>());
            _sessionFactory = cfg.BuildSessionFactory();
            BuildSchema(cfg);
        }
        return _sessionFactory.OpenSession();
    }

    private static void BuildSchema(FluentConfiguration configuration)
    {
        var sessionSource = new SessionSource(configuration);
        var session = sessionSource.CreateSession();
        sessionSource.BuildSchema(session);            
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个问题.我的应用程序分为客户端和服务器.Nhibernate的东西在服务器端.在启动时,我的客户端和服务器都希望通过一些将使用NhibernateSessionFactory的服务来访问数据库.结果是在请求来自客户端之前是否创建了_sessionFactory的竞争条件.如果不是它会失败..

我想我需要在NhibernateSessionFactory中使用某种排队或等待机制,但我不知道该怎么做.以前有人遇到过同样的问题吗?什么是最好的解决方案?

c# nhibernate sessionfactory fluent-nhibernate

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

Spring + Hibernate,将autowire sessionFactory转换为hibernate DAO

我有一个Hibernate的DAO,在根据Hibernate的API 3春天3.x中,我用一个简单的sessionFactoryNOTHibernateDaoSupport+ getHibernateTemplate()-我希望这是一个不错的选择-

现在我的目标是sessionFactory使用注释自动装入我的DAO.

spring.xml有这个:

<context:component-scan base-package="data" />
Run Code Online (Sandbox Code Playgroud)

内部数据包我有我所有的DAO和服务类.

这很简单HibernateDao:

@Repository
public class PersonHDAO implements PersonDAO {

 private SessionFactory sessionFactory;

 @Autowired
 public void setSessionFactory(SessionFactory sessionFactory) {
     this.sessionFactory = sessionFactory;
 }

 public List<Person> findAll(){
  return sessionFactory.getCurrentSession().createQuery("bla bla").list();
 }
}
Run Code Online (Sandbox Code Playgroud)

我在spring.xml加载过程中没有错误,但sessionFactory仍然是null.

我该怎么办?

编辑

这是我sessionFactoryspring.xml以下方面的声明:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context" …
Run Code Online (Sandbox Code Playgroud)

spring hibernate sessionfactory autowired

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

从会话工厂以编程方式获取hibernate默认模式名称?

我想知道是否有办法从会话工厂获取默认模式名称,不知何故?我需要得到它的原因是因为我必须使用一个本机SQL,并且我有多个会话工厂用于多个模式和单个数据源.所有生成的hibernate查询都由一个用户运行,该用户可以选择访问其他模式.

hibernate sessionfactory

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

org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为'sessionFactory'的bean时出错

我使用spring和hibernate配置mysql db.

我的we.xml文件包含以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/classes/applicationcontext.xml</param-value>
    </context-param>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)

我的applicationcontext.xml文件有以下导入:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="autodetect">
  <import resource="spring-config/spring-common-applicationContext.xml"/>
  <import resource="spring-config/spring-db-applicationContext.xml"/>
  <import resource="spring-config/spring-dao-applicationContext.xml"/>
  <import resource="spring-config/spring-processor-applicationContext.xml"/>
  <import resource="spring-config/spring-security-processor-applicationContext.xml"/>
  <import resource="spring-config/spring-service-applicationContext.xml"/>
  <import resource="spring-config/spring-security-service-applicationContext.xml"/>
</beans>
Run Code Online (Sandbox Code Playgroud)

我的spring-db-applicationContext.xml有以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="autodetect">

<!-- Hibernate session factory -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <constructor-arg index="0">
            <value>${driverClassName}</value>
        </constructor-arg>
        <constructor-arg …
Run Code Online (Sandbox Code Playgroud)

spring hibernate sessionfactory

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

视图中的Hibernate Open会话:每个请求的事务?

我在Tomcat上使用Hibernate和Spring.我一直在阅读并重新阅读关于该主题的指向JBoss wiki页面的内容,这很有帮助.但它给我留下了一些问题.

  1. 为每个请求启动交易的想法让我很烦恼.我想我可以将过滤器限制在某些控制器 - 可能将我需要交易的所有控制器放在伪"tx"路径下.但如果您不知道是否需要交易,那么使用交易不是一个坏主意吗?如果我只是在某些请求中读取 - 很可能来自缓存的读取 - 在没有事务的情况下我不是更好吗?

  2. 我读过帖子,提到他们如何处理服务层的事务,我想用Spring做这件事.但那么过滤器代码是什么样的呢?我仍然希望在我的视图中可以使用会话进行一些延迟加载.

  3. 如果我所要做的就是调用sessionFactory.getCurrentSession()我的过滤器,它如何被"释放"回会话工厂重新使用?(session.close()即使在使用事务时,我也希望看到一个或者什么.)谁在告诉会话工厂该会话可以重用?

  4. 也许beginTransaction()是在请求期间将给定数据库连接绑定到给定会话的调用?否则,会话根据需要从池中提取数据库连接,对吧?

感谢您对我的所有问题的耐心等待.

(如果你的答案将成为Spring文档的链接,那么你只会让我哭泣.你不想要那个,是吗?如果人们不再回答Spring相关的问题,我会付真钱吗办法.)

spring hibernate sessionfactory open-session-in-view

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

使用Spring Hibernate Sessionfactory从数据库中选择单个项目

这是我的DAO:

public List<Weather> getCurrentWeather() {  
    return sessionFactory.getCurrentSession().createQuery("from Weather").list();
}
Run Code Online (Sandbox Code Playgroud)

这可以从表天气中获取所有元素.但是,让我说我想做这样的事情(我只希望表天气中的一个元素):

public Weather getCurrentWeather() {    
    return sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list()
}
Run Code Online (Sandbox Code Playgroud)

我知道最终不应该有 list() ,但我必须在那里写什么才能得到一个对象?

java spring hibernate sessionfactory

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