2013-12-16 12 views
8

Bây giờ tôi đang tạo ra EntityManagerFactory như thế này:Tạo EntityManagerFactory programatically (không có tập tin persistence.xml) với các lớp chú thích

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

Tuy nhiên như tôi có thể nhìn thấy trong javadocs, Ejb3Configuration bị phản đối và tôi không nên sử dụng nó. Tôi nên sử dụng Persistence.createEntityManagerFactory() theo mục JPA spec phần 7.3. Nhưng sau đó tôi có thể vượt qua chỉ một số thuộc tính, nhưng tôi có thể thêm các lớp chú thích bằng cách nào đó?

+0

Tôi nghĩ bài đăng này có thể giúp bạn http://stackoverflow.com/questions/8448950/adding-entity-classes-dynamically-at-runtime –

Trả lời

1

Hãy tìm thấy những lớp cấu hình tương đương cho MySQL với các chú thích mùa xuân:

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

mùa xuân phụ thuộc:

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

Để thực hiện thử nghiệm với một cơ sở dữ liệu nhúng như HSQL, H2 hoặc Derby, bạn có thể thêm một bean nguồn dữ liệu khác:

@Bean(name = "embeddedDatabase") 
public DataSource embeddedDataSource() { 
    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); 
    return builder.setType(EmbeddedDatabaseType.HSQL).build(); 
} 
Các vấn đề liên quan