2013-12-16 29 views
8

ile programlama (persistence.xml dosyası olmadan) EntityManagerFactory oluşturun:Şimdi böyle <code>EntityManagerFactory</code> oluşturma açıklamalı sınıfları

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(); 

Ancak javadocs içinde, Ejb3Configuration kullanımdan kaldırıldı ve bunu kullanmamalıdır görebilirsiniz. JPA spec bölüm 7.3'e göre Persistence.createEntityManagerFactory() kullanmalıyım. Ama sonra sadece bazı özellikleri geçebilirim, ancak açıklamalı dersler ekleyebilir miyim?

+0

Bu yazının size yardımcı olabileceğini düşünüyorum http://stackoverflow.com/questions/8448950/adding-entity-classes-dynamically-at-runtime –

cevap

1

Bahar ek açıklamaları içeren MySQL için eşdeğer yapılandırma sınıfını bulabilirsiniz:

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

Bahar bağımlılıkları:

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

böyle HSQL, H2 veya Derby olarak gömülü bir veritabanı ile testlerini gerçekleştirmek için, Başka bir veri kaynağını ekleyebilirsiniz:

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