2013-12-16 15 views
8

で(persistence.xmlのファイルなし)をプログラムのEntityManagerFactoryを作成します。今、私はこのようなEntityManagerFactoryを作成しています:注釈付きクラス

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

をしかし、私はEjb3Configurationは廃止され、私はそれを使用してはならない、のjavadocで見ることができるように。私は、JPA specセクション7.3に従って、Persistence.createEntityManagerFactory()を使うべきです。しかし、私はいくつかのプロパティだけを渡すことができますが、どうやらアノテーション付きのクラスを追加できますか?

+0

この投稿はあなたに役立つと思いますhttp://stackoverflow.com/questions/8448950/adding-entity-classes-dynamically-at-runtime –

答えて

1

は、Springのアノテーションを使用してMySQLのための同等の構成クラスを見つけてください:

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

春の依存関係:

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

なHSQL、H2またはDerbyなどの組み込みデータベースでテストを実行するには、別のデータソースBeanを追加できます。

@Bean(name = "embeddedDatabase") 
public DataSource embeddedDataSource() { 
    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
    return builder.setType(EmbeddedDatabaseType.HSQL).build(); 
} 
関連する問題