代码之家  ›  专栏  ›  技术社区  ›  ripper234 Jonathan

无弹簧的整体管理器

  •  1
  • ripper234 Jonathan  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   JOTN    14 年前

    这是一些测试代码。它寻找持久性。META-INF目录中的xml文件。

    EntityManagerFactory emf=Persistence.createEntityManagerFactory("test-unit");
    EntityManager em=emf.createEntityManager();
    

    下面是一个持久性的例子。使用hibernate连接到postgresql数据库和两个实体类的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/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> 
    
        2
  •  1
  •   Aleks Ya    11 年前

    使用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;
        }
    }
    

    依赖项:

    1. 通用域名格式。h2数据库:h2:1.4.178
    2. 组织。hibernate:hibernate核心:4.3.5。最终的
    3. 组织。hibernate:hibernate entitymanager:4.3.5。最终的