Spring Data Jpa 实体自动创建在entityManagerFactory定义后不工作

vsdwdz23  于 2024-01-09  发布在  Spring
关注(0)|答案(1)|浏览(267)

我有一个Spring-Jpa的工作代码。最近我有一个需求,我必须添加多个对象,并且为了相同的目的,我必须定义实体ManagerFactory。(代码如下).由于我添加此实体的时间(表)不会自动创建或不被应用程序识别.我的项目使用Spring父2.7.13 .我尝试了它与较新版本的Spring(3.1.3)它工作正常。有人能帮我出什么问题,有什么我错过了。我已经验证了包,它是好的。此外,在这个新的类被添加之前,它工作正常。

  1. @Configuration
  2. public class DataSourceConfig {
  3. // Primary datasource configuration
  4. @Primary
  5. @Bean(name = "primaryDataSource")
  6. @ConfigurationProperties(prefix = "spring.datasource")
  7. public DataSource primaryDataSource() {
  8. return DataSourceBuilder.create().build();
  9. }
  10. @Primary
  11. @Bean(name = "entityManagerFactory")
  12. public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {
  13. return builder
  14. .dataSource(dataSource)
  15. .packages("com.example.demo.model") // base package for your JPA entities
  16. .persistenceUnit("primary")
  17. .build();
  18. }
  19. @Primary
  20. @Bean(name = "transactionManager")
  21. public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
  22. return new JpaTransactionManager(entityManagerFactory);
  23. }
  24. // Secondary Datasource 1 Configuration
  25. @Bean(name = "secondaryDataSource")
  26. @ConfigurationProperties(prefix = "spring.ds1")
  27. public DataSource secondaryDataSource() {
  28. return DataSourceBuilder.create().build();
  29. }
  30. @Bean(name = "secondaryJdbcTemplate")
  31. public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
  32. return new JdbcTemplate(dataSource);
  33. }
  34. // Secondary Datasource 2 Configuration
  35. @Bean(name = "thirdDataSource")
  36. @ConfigurationProperties(prefix = "spring.ds2")
  37. public DataSource thirdDataSource() {
  38. return DataSourceBuilder.create().build();
  39. }
  40. @Bean(name = "thirdJdbcTemplate")
  41. public JdbcTemplate thirdJdbcTemplate(@Qualifier("thirdDataSource") DataSource dataSource) {
  42. return new JdbcTemplate(dataSource);
  43. }
  44. }

字符串

1tu0hz3e

1tu0hz3e1#

对我有效的方法是:
1.我为每个数据库/用户创建了一个文件夹,我希望我的应用程序连接。例如,如果你想连接到2个数据库(db 1,db2),我创建了2个文件夹db 1和db2。
1.在这些文件夹中,我创建了一个Entity文件夹(我将对应的数据库实体放在其中),一个Repository文件夹,一个Service文件夹和一个Config文件夹。
1.在Config文件夹中,我创建了DB1_Config.java文件(DB1_Config用于db 1,DB2_Config用于db2)

  1. DB1_Config.java**文件如下所示
  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(
  4. entityManagerFactoryRef = "DB1userEntityManagerFactory",
  5. transactionManagerRef = "DB1userTransactionManager",
  6. basePackages = {"com.DataBase.DB1.user.Repository"}) //put the actual path to your Repository folder
  7. public class DB1_Config{
  8. static final String JNDI = "jdbc/DB1user"; //your actual jndi name
  9. @Bean(name = "DB1userDataSource", destroyMethod = "")
  10. @ConfigurationProperties(prefix = "DB1user.datasource")
  11. public DataSource dataSource() throws DataSourceLookupFailureException {
  12. JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
  13. return dataSourceLookup.getDataSource(JNDI);
  14. }
  15. @Bean(name = "DB1userEntityManagerFactory")
  16. public LocalContainerEntityManagerFactoryBean
  17. entityManagerFactory(
  18. EntityManagerFactoryBuilder builder,
  19. @Qualifier("DB1userDataSource") DataSource dataSource) {
  20. return builder.dataSource(dataSource).packages("com.DataBase.DB1.user.Entity").persistenceUnit("db1user").build();
  21. } //in com.DataBase.DB1.user.Entity put your actual Entity path
  22. @Bean(name = "DB1userTransactionManager")
  23. public PlatformTransactionManager entityTransactionManager(
  24. @Qualifier("DB1userEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
  25. return new JpaTransactionManager(entityManagerFactory);
  26. }
  27. }

字符串
和DB2_Config一样,但是无论它写DB 1,你都要把DB2放在哪里。我认为主要的问题是你必须根据不同的数据库对你的类进行分组,或者如果你在不同模式用户的同一个数据库上**。

展开查看全部

相关问题