Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获得不带弹簧的实体管理器_Java_Hibernate_Spring_Entitymanager_Hibernate Generic Dao - Fatal编程技术网

Java 获得不带弹簧的实体管理器

Java 获得不带弹簧的实体管理器,java,hibernate,spring,entitymanager,hibernate-generic-dao,Java,Hibernate,Spring,Entitymanager,Hibernate Generic Dao,我使用的是hibernate,但不是Spring,我刚刚发现。 这个概念看起来不错,但是当我运行它时,我得到了一个NPE,因为我没有调用setEntityManager() 如何在不使用Spring的情况下获得EntityManager?我有一些测试代码。它在META-INF目录中查找persistence.xml文件 EntityManagerFactory emf=Persistence.createEntityManagerFactory("test-unit"); EntityManag

我使用的是hibernate,但不是Spring,我刚刚发现。 这个概念看起来不错,但是当我运行它时,我得到了一个NPE,因为我没有调用setEntityManager()


如何在不使用Spring的情况下获得EntityManager?

我有一些测试代码。它在META-INF目录中查找persistence.xml文件

EntityManagerFactory emf=Persistence.createEntityManagerFactory("test-unit");
EntityManager em=emf.createEntityManager();
下面是一个persistence.xml示例,它使用连接到postgresql数据库的hibernate和两个实体类:

<?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/per\
sistence_1_0.xsd"> 
  <persistence-unit name="test-unit" transaction-type="RESOURCE_LOCAL"> 
    <class>com.example.package.Entity1</class> 
    <class>com.example.package.Entity2</class> 
    <properties> 
      <property name="hibernate.dialect"  
                value="org.hibernate.dialect.PostgreSQLDialect"/> 
      <property name="hibernate.connection.driver_class"  
                value="org.postgresql.Driver"/> 
      <property name="hibernate.connection.username" value="login"/> 
      <property name="hibernate.connection.password" value="password"/> 
      <property name="hibernate.connection.url"  
                value="jdbc:postgresql://dbserver.internal:5432/dbname"/> 
    </properties> 
  </persistence-unit> 
</persistence> 

com.example.package.Entity1
com.example.package.Entity2

使用Hibernate 4和H2数据库获取EntityManager

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.jpa.internal.EntityManagerFactoryImpl;
import org.hibernate.service.ServiceRegistry;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.spi.PersistenceUnitTransactionType;

public class Main {

    public static void main(String[] args) {
        Configuration configuration = getConfiguration();

        StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
        serviceRegistryBuilder.applySettings(configuration.getProperties());
        ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();

        EntityManagerFactory factory = new EntityManagerFactoryImpl(
                PersistenceUnitTransactionType.RESOURCE_LOCAL, true, null, configuration, serviceRegistry, null);

        EntityManager em = factory.createEntityManager();
    }

    private static Configuration getConfiguration() {
        Configuration configuration = new Configuration();
        configuration.setProperty("hibernate.connection.driver_class", "org.h2.Driver");
        configuration.setProperty("hibernate.connection.url", "jdbc:h2:~/test");
        configuration.setProperty("hibernate.connection.pool_size", "1");
        configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
        configuration.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.internal.NoCachingRegionFactory");
        configuration.setProperty("hibernate.show_sql", "true");
        configuration.setProperty("hibernate.hbm2ddl.auto", "create");
        configuration.setProperty("hibernate.connection.autocommit", "false");
        configuration.addAnnotatedClass(RegionEntity.class);
        return configuration;
    }
}
依赖项:

  • com.h2数据库:h2:1.4.178
  • org.hibernate:hibernate核心:4.3.5.Final
  • org.hibernate:hibernate entitymanager:4.3.5.Final

  • 另见Amm。。。我没有persistence.xml文件。您必须创建一个。这就是要定义实体类的内容。不,不是。我使用的是hibernate.cfg.xml,它看起来与您发布的不一样,而且我的测试正在运行:)您是说EntityManager必须有这个xml吗?如果是这样的话,那么hibernate泛型dao此时可能不适合我。
    hibernate.cfg.xml
    适用于本机hibernate
    persistence.xml
    用于JPA。如果要使用
    EntityManager
    ,可能应该使用
    persistence.xml
    ,因为这是JPA方法。如果您只想使用Hibernate,那么请使用
    SessionFactory
    Session
    来代替。@Steven-我使用SessionFactory和Session很好,但我想集成Hibernate通用dao,显然它需要EntityManager。