Миграция Spring 3.3.x: невозможно разрешить ссылку на bean-компонент jpaSharedEM_entityManagerFactoryJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Миграция Spring 3.3.x: невозможно разрешить ссылку на bean-компонент jpaSharedEM_entityManagerFactory

Сообщение Anonymous »

Я перехожу с Spring 2.7 на Spring 3.3.13. Это означает, что мне нужно перейти с Hibernate 5 на Hibernate 6. Я столкнулся с неприятной проблемой в конфигурации моей базы данных.
У меня есть этот класс конфигурации (я подверг цензуре конфиденциальные имена пакетов):

Код: Выделить всё

package ***.datasource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 jakarta.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.HashMap;

/**
*
* Data source configuration for Anag Database.
*
*/
@Configuration
@ConditionalOnProperty(prefix = "spring.anag.datasource", name = "url")
public class AnagSourceConfiguration {

@Value("${spring.anag.hibernate.hbm2ddl.auto:validate}")
private String hibernateHbm2ddlAuto;

@Value("${hibernate.dialect}")
private String hibernateDialect;

@Bean(name = "anagDataSource")
@ConfigurationProperties("spring.anag.datasource")
public DataSource anagDataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "anagEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean anagEntityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(anagDataSource());
em.setPackagesToScan("***.entity.anag");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
final HashMap properties = new HashMap();
properties.put("hibernate.hbm2ddl.auto", hibernateHbm2ddlAuto);
properties.put("hibernate.dialect", hibernateDialect);
em.setJpaPropertyMap(properties);
return em;
}

@Bean(name = "anagTransactionManager")
public PlatformTransactionManager jpaTransactionManager(EntityManagerFactory anagEntityManagerFactory) {
return new JpaTransactionManager(anagEntityManagerFactory);
}
}
по сути, я заменил только javax на jakarta, заменил «jdbc-url» на «url» (то же самое в файле yaml) и добавил свойство для диалекта спящего режима. Я не заменял javax.sql.Datasource, потому что читал, что версии этого класса в Джакарте не существует.
Тогда у меня есть этот класс, который я создал для поддержки репозиториев:

Код: Выделить всё

package ***.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@Configuration
@EnableJpaRepositories(
basePackages = "***.repositories.anag",
entityManagerFactoryRef = "anagEntityManagerFactory",
transactionManagerRef = "anagTransactionManager"
)
public class AnagRepositoriesConfig {
}
Теперь, когда я пытаюсь запустить свое приложение Spring, я столкнулся с этой неприятной проблемой, когда Spring пытается загрузить первый объявленный класс репозитория:

Код: Выделить всё

"message":"Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'delegatorFilter' defined in file [***\\config\\DelegatorFilter.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'userDelegationService' defined in file [***\\service\\UserDelegationService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userAccountDelegationRepository' defined in ***.repositories.anag.UserAccountDelegationRepository defined in @EnableJpaRepositories declared on AnagRepositoriesConfig: Cannot resolve reference to bean 'jpaSharedEM_anagEntityManagerFactory' while setting bean property 'entityManager'","logger_name":"org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext","thread_name":"main","level":"WARN","level_value":30000}

Parameter 0 of constructor in ***.service.UserDelegationService required a bean named 'anagEntityManagerFactory' that could not be found.\r\n\r\n\r\nAction:\r\n\r\nConsider defining a bean named 'anagEntityManagerFactory' in your configuration.\r\n","logger_name":"org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter","thread_name":"main","level":"ERROR","level_value":40000}
Кажется, Spring пытается загрузить этот jpaSharedEM_anagEntityManagerFactory. Это своего рода объединение имен с моим bean-компонентом anagEntityManagerFactory. Кто-нибудь сталкивался с этой проблемой раньше? Я прочитал здесь несколько других тем, но не нашел хорошего решения. Я удалил javax из любой строки кода и удалил зависимости. Как я уже сказал, класс Datasource является единственным исключением.
Похоже, проблема не в моем классе репозитория. UserAccountDelegationRepository - это всего лишь первый класс репозитория, который Spring встретил при запуске. Я попробовал переместить классы репозитория, но столкнулся с той же ошибкой.

Подробнее здесь: https://stackoverflow.com/questions/798 ... entitymana
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»