2010-11-27 14 views
1

Ich benutze Winterschlaf aber nicht Spring, und gerade gefunden hibernate-generic-dao. Das Konzept scheint nett, aber wenn ich es ausführe, bekomme ich eine NPE, weil ich setEntityManager() nicht aufgerufen habe.Bekommen EntityManager ohne Frühling

Wie erhalte ich einen EntityManager, ohne Spring zu verwenden?

+0

See http://code.google.com/p/hibernate-generic-dao/issues/detail?id=77 – ripper234

Antwort

1

Ich habe dies ist ein Testcode. Es sucht nach einer Datei persistence.xml im Verzeichnis META-INF.

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

Hier ist ein Beispiel persistence.xml, dass zu einer PostgreSQL-Datenbank und zwei Entitätsklassen angeschlossenen nutzt 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> 
+0

Amm ... ich habe keine Ausdauer XML-Datei – ripper234

+0

Sie müssen einen erstellen. Das wird deine Entitätsklassen definieren. – JOTN

+0

Nein, ist es nicht. Ich benutze eine Hibernate.cfg.xml, und es sieht nicht wie das aus, was Sie gepostet haben, und meine Tests funktionieren :) Wollen Sie sagen, dass EntityManager dieses XML haben muss? Wenn das der Fall ist, dann ist wahrscheinlich Hibernate-Generic-Dao an dieser Stelle nicht für mich. – ripper234

1

Erhalten EntityManager mit Hibernate 4 und H2-Datenbank.

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

Abhängigkeiten:

  1. com.h2database: h2: 1.4.178
  2. org.hibernate: Ruhezustand-core: 4.3.5.Final
  3. org.hibernate: hibernate- EntityManager : auch 4.3.5.Final
Verwandte Themen