标签: hibernate-entitymanager

Hibernate SessionFactory与EntityManagerFactory

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

java hibernate jpa sessionfactory hibernate-entitymanager

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

如果我有entitymanager,我如何获得会话对象

我有

private EntityManager em;

public List getAll(DetachedCriteria detachedCriteria)   {

    return detachedCriteria.getExecutableCriteria( ??? ).list();
}
Run Code Online (Sandbox Code Playgroud)

如果我使用entitymanager,我如何检索会话?如何从我的detachedcriteria获得结果?

java hibernate jpa hibernate-entitymanager

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

javax.persistence.PersistenceException:无法构建实体管理器工厂

当我试图创建一个新的EntityManager来保存我的数据时,我得到以下错误:

javax.persistence.PersistenceException:无法构建实体管理器工厂

我使用的是Hibernate的JPA-Persistence Provider ...

不幸的是我在stackoverflow/google搜索中找不到任何有用的帖子......

有没有人知道错误的原因在哪里?

谢谢您的帮助!

代码片段:

创建实体管理者

EntityManager em;
    EntityManagerFactory fact = Persistence.createEntityManagerFactory("bachelordebug"); // Here it crashes
    em = fact.createEntityManager();
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:81)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at com.uzh.platform.api.util.AssignmentUtil.findAll(AssignmentUtil.java:20)
at com.uzh.platform.api.services.GetAssignments.getAssignments(GetAssignments.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:402)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:349)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:106)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:259)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:267) …
Run Code Online (Sandbox Code Playgroud)

persistence jpa exception hibernate-entitymanager

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

Spring 3.1 + Hibernate 4.1 JPA,实体经理工厂注册了两次

我正在使用Spring Framework 3.1和Hibernate 4.1作为JPA提供程序,我有一个功能齐全的设置,但每次启动Web应用程序时,我都会看到以下警告消息:

14:28:12,725  WARN pool-2-thread-12 internal.EntityManagerFactoryRegistry:80 - HHH000436: Entity manager factory name (something) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
Run Code Online (Sandbox Code Playgroud)

该应用程序功能很好,但是这样的警告信息让我烦恼,而且数小时的搜索,调整和试验都让我无处可去.我已经尝试更改工厂名称并添加和省略配置块,但都无济于事.似乎Spring或Hibernate中的某些东西只是初始化实体管理器工厂两次.

仅供参考,我正在使用LocalContainerEntityManagerFactoryBean的packagesToScan功能来配置没有persistence.xml文件的实体管理器.

我已经将我的spring上下文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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <context:property-placeholder location="classpath:jdbc.properties"/>
  <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.nightsword.driverClassName}"/>
    <property name="url" value="${jdbc.nightsword.url}"/>
    <property name="username" value="${jdbc.nightsword.username}"/>
    <property name="password" value="${jdbc.nightsword.password}"/>
  </bean>

  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa hibernate-entitymanager

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

需要一个类型为“org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder”的bean,但无法找到

我有一个 Spring Boot 2.4.0 应用程序,它连接到 2 个不同的数据源。我不断收到此错误。我在互联网上寻找解决方案。我发现我只需要使用@Primary 指定我的一个bean,事实上我也这样做了(所以这不是我的情况)。我将在下面发布错误和类。谢谢你:

错误:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.> 
<Jun 14, 2021 11:07:01 AM EEST> <Notice> <Stdout> <BEA-000000> <2021-06-14 11:07:01.740 ERROR 7845 --- [ (self-tuning)'] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method entityManagerFactory in demo.Db1Config required a bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' in your configuration.> 
<Jun 14, 2021 …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate-entitymanager spring-boot

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

hibernate,mysql,glassfish v3和JTA数据源

我正在尝试使用mysql和glassfish的hibernate实体管理器.尝试使用JTA数据源时出现以下错误:

Caused by: org.hibernate.HibernateException: The chosen transaction strategy requires access to the JTA TransactionManager
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:376)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1367)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:858)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:733)
        ... 37 more
Run Code Online (Sandbox Code Playgroud)

以下是我配置persistence.xml的方法

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="myPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/mysql</jta-data-source>
    <class>com.my.shared.entity.MyFile</class>
    <class>com.my.shared.entity.MyRole</class>
    <class>com.my.shared.entity.MyUser</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
      <property name="hibernate.show.sql" value="true" />
    </properties>
Run Code Online (Sandbox Code Playgroud)

但是,当我配置非jta数据源时,它工作正常

<?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
      <persistence-unit name="myPU" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>jdbc/mysql</non-jta-data-source>
        <class>com.my.shared.entity.MyFile</class>
        <class>com.my.shared.entity.MyRole</class>
        <class>com.my.shared.entity.MyUser</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
          <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
          <property name="hibernate.show.sql" value="true" /> …
Run Code Online (Sandbox Code Playgroud)

mysql hibernate jta glassfish hibernate-entitymanager

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

Spring + EntityManagerFactory + Hibernate Listeners + Injection

我有一个简单的问题.可以通过@Ressource或@Autowired向Hibernate Eventlistener添加依赖注入吗?

我将向您展示我的entitymanagerfactory配置:

<bean id="entityManagerFactory" class="org.hibernate.ejb.EntityManagerFactoryImpl">
    <qualifier value="entityManagerFactory" />
    <constructor-arg>
        <bean
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="persistenceUnitManager">
                <bean
                    class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManagerr">
                    <property name="defaultDataSource" ref="dataSource" />
                </bean>
            </property>
            <property name="dataSource" ref="dataSource" />
            <property name="persistenceUnitName" value="mis" />
            <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence" />
            <property name="jpaProperties" ref="jpa.properties" />
            <property name="jpaDialect" ref="jpaDialect" />
            <property name="jpaVendorAdapter">
                <bean
                    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                    <property name="generateDdl" value="true" />
                    <property name="database">
                        <util:constant
                            static-field="org.springframework.orm.jpa.vendor.Database.POSTGRESQL" />
                    </property>
                    <property name="showSql" value="true" />
                </bean>
            </property>

        </bean>
    </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

目前我通过jpa.properties注册我的监听器,

hibernate.ejb.event.load=com.example.hibernate.events.LoadEvent
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我的听众没有弹簧注射.我找到了一个解决方案,但这使用sessionFactory而不是entitymanager oder我可以在我的上下文中修改sessionfactory吗?希望有人有一个好主意或解决方案来处理这个问题!

十分感谢!

java spring hibernate jpa hibernate-entitymanager

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

使用EntityManager进行Hibernate更新

我正在使用Hibernate 4.1.7并尝试更新对象,但没有文档应该如何完成.目前,我这样做:

    Person person = personDao.getPersonById(1);
    person.setAge(23);
    person.setLastname("McName");
    person = personDao.update(person);
Run Code Online (Sandbox Code Playgroud)

在PersonDao更新看起来像:

    public Person update(Person person) {
      return entityManager.merge(person);
    }
Run Code Online (Sandbox Code Playgroud)

在PersonDao中,getPersonById是:

    public Person getPersonById(int id) {
      personQuery = entityManager.createNamedQuery("Person.findPerson", Person.class);
      personQuery.setParameter("id", id);
      return personQuery.getSingleResult();
    }
Run Code Online (Sandbox Code Playgroud)

我也在Person类中定义了命名查询,并在这里:

    @NamedQuery(name="Person.findPerson", query="SELECT p FROM Person p WHERE p.id = :id")
Run Code Online (Sandbox Code Playgroud)

通过使用我的Person将不会更新,我应该如何使用hibernate实现更新?

java hibernate named-query hibernate-entitymanager

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

如何使用Hibernate JPA和Spring Framework启用加载时/运行时编织

我在Spring Framework应用程序中使用Hibernate作为JPA提供程序(我使用它EntityManagerFactory而不是它SessionFactory).我设法让Spring Framework的加载时间编织支持工作,所以我已经超越了这个障碍.

我需要在实体上启用延迟加载byte[]@ManyToOne属性.我理解如何使用Hibernate的ant任务在构建时检测(编织)我的实体,但是我想在运行时检测我的实体(加载时间编织).我已经看到过几个谷歌搜索结果的引用,但没有启用它的实际说明.我需要设置什么属性来指示Hibernate它可以在运行时检测我的实体?

spring hibernate jpa hibernate-entitymanager load-time-weaving

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

Hibernate:无法访问TransactionManager或UserTransaction以进行物理事务委托

我正在使用Servlets,PostgreSQL和Hibernate与EntityManager构建一个Web应用程序,一切正常,直到我将项目移动到基于Maven的项目.现在,每次尝试从EntityManagerFactory创建EntityManager时,我都会收到这个奇怪的异常:

org.hibernate.resource.transaction.backend.jta.internal.JtaPlatformInaccessibleException: Unable to access TransactionManager or UserTransaction to make physical transaction delegate
at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl.makePhysicalTransactionDelegate(JtaTransactionCoordinatorImpl.java:229)
at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl.getTransactionDriverControl(JtaTransactionCoordinatorImpl.java:203)
at org.hibernate.engine.transaction.internal.TransactionImpl.<init>(TransactionImpl.java:36)
at org.hibernate.internal.AbstractSessionImpl.getTransaction(AbstractSessionImpl.java:309)
at org.hibernate.internal.SessionImpl.<init>(SessionImpl.java:277)
at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1322)
at org.hibernate.jpa.internal.EntityManagerImpl.internalGetSession(EntityManagerImpl.java:133)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:174)
at org.hibernate.jpa.internal.EntityManagerImpl.<init>(EntityManagerImpl.java:83)
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:311)
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:278)
at cl.bicubic.App.getEntityManager(App.java:100)
at cl.bicubic.dao.DAO.<init>(DAO.java:24)
at cl.bicubic.dao.UserAtomicDAO.<init>(UserAtomicDAO.java:15)
at cl.bicubic.Application.init(Application.java:70)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at …
Run Code Online (Sandbox Code Playgroud)

java postgresql hibernate servlets hibernate-entitymanager

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