2013-12-16 9 views
8

Jetzt bin ich EntityManagerFactory wie folgt zu erstellen:erstellen EntityManagerFactory programmatisch (ohne persistence.xml-Datei) mit kommentierten Klassen

Map<String, String> properties = ImmutableMap.<String, String>builder() 
     .put(DRIVER, "com.mysql.jdbc.Driver") 
     .put(DIALECT, "org.hibernate.dialect.MySQL5Dialect"); 
     .put(USER, dbUsername) 
     .put(PASS, dbPassword) 
     .put(URL, dbConnectionUrl) 
     //Some more properties 
     .build(); 

    Ejb3Configuration cfg = new Ejb3Configuration(); 

    cfg.configure(properties); 

    cfg.addAnnotatedClass(AuditEntry.class); 
    cfg.addAnnotatedClass(LastWrittenEventId.class); 
    //Some more annotated classes 

    return cfg.createEntityManagerFactory(); 

Doch als ich in javadocs sehen kann, Ejb3Configuration veraltet und ich soll es nicht verwenden. Ich sollte Persistence.createEntityManagerFactory() nach JPA spec Abschnitt 7.3 verwenden. Aber dann kann ich nur einige Eigenschaften übergeben, aber kann ich irgendwie annotierte Klassen hinzufügen?

+0

Ich denke, dieser Beitrag könnte Ihnen helfen http://stackoverflow.com/questions/8448950/adding-entity-classes-dynamically-at-runtime –

Antwort

1

Bitte die entsprechende Konfigurationsklasse für MySQL mit Frühlings-Anmerkungen finden:

package config; 

import java.util.Properties; 

import javax.persistence.EntityManagerFactory; 
import javax.sql.DataSource; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.orm.jpa.JpaTransactionManager; 
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; 
import org.springframework.transaction.PlatformTransactionManager; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

@Configuration 
@EnableTransactionManagement 
public class DatabaseConfiguration { 

    private Properties jpaProperties() { 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
     return properties; 
    } 

    @Bean 
    public DataSource dataSource() { 

     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost:3306/test"); 
     dataSource.setUsername("username"); 
     dataSource.setPassword("password"); 

     return dataSource; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan("foo.bar"); 
     factory.setDataSource(dataSource()); 
     factory.setJpaProperties(jpaProperties()); 

     return factory; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { 

     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(emf); 

     return txManager; 
    } 
} 

Frühling Abhängigkeiten:

<dependencies> 
    ... 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 
    ... 
</dependencies> 

Um Tests mit einer eingebetteten Datenbank wie HSQL, H2 oder Derby durchführen, Sie können eine weitere Datenquellen-Bean hinzufügen:

@Bean(name = "embeddedDatabase") 
public DataSource embeddedDataSource() { 
    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
    return builder.setType(EmbeddedDatabaseType.HSQL).build(); 
} 
Verwandte Themen