Ниже приведена ссылка, чтобы понять «https://medium.com/swlh/multi-tenancy-implementation-using-spring-boot-hibernate-6a8e3ecb251a» учебник
package jpa.tenants;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@SuppressWarnings("serial")
@Component
public class DataSourceBasedMultiTenantConnectionProviderImpl extends AbstractDataSourceBasedMultiTenantConnectionProviderImpl {
@Autowired
private DataSource defaultDS;
@Autowired
private ApplicationContext context;
private Map<String, DataSource> map = new HashMap<>();
boolean init = false;
private String DEFAULT_TENANT_ID="1";
@PostConstruct
public void load() {
map.put(DEFAULT_TENANT_ID, defaultDS);
}
@Override
protected DataSource selectAnyDataSource() {
return map.get(DEFAULT_TENANT_ID);
}
@Override
protected DataSource selectDataSource(String tenantIdentifier) {
if (!init) {
init = true;
TenantDataSource tenantDataSource = context.getBean(TenantDataSource.class);
map.putAll(tenantDataSource.getAll());
}
return map.get(tenantIdentifier) != null ? map.get(tenantIdentifier) : map.get(DEFAULT_TENANT_ID);
}
}
В результате ниже исключение:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path
ресурс [jpa /tenants/HibernateConfig.class]: сбой вызова метода init; Вложенное исключение: org.hibernate.AnnotationException: для сущности не указан идентификатор: jpa.tenants.DataSourceConfig в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireFapory-172: spring-17): .2.RELEASE.jar: 5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory. java: 595) ~ [springRE-5.2.E.Beans-5.2. 5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory. java: 517) ~ [spring-beans-5.2.2.RELEASE.RAR 5.2: at] 5.2.2 org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory. java: 323) ~ [spring-beans-5.2.2.RELEASE.jar: 5.2.2.RELEASE] в org.springframework. beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry. java: 222) ~ [spring-beans-5.2.2.RE LEASE.jar: 5.2.2.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory. java: 321) ~ [spring-beans-5.2.2.RELEASE.jar: 5.2.2 .RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory. java: 202) ~ [spring-beans-5.2.2.RELEASE.jar: 5.2.2.RELEASE] в org.springframework .context.support.AbstractApplicationContext.getBean (AbstractApplicationContext. java: 1108) ~ [spring-context-5.2.2.RELEASE.jar: 5.2.2.RELEASE] в org.springframework.context.support.AbstractApplicationConitialFine AbstractApplicationContext. java: 868) ~ [spring-context-5.2.2.RELEASE.jar: 5.2.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refre sh (AbstractApplicationContext. java: 550) ~ [spring-context-5.2.2.RELEASE.jar: 5.2.2.RELEASE] по адресу org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refre sh (ServletWebServerApplicationContext. java 14): ~ [Sprin g-boot-2.2.2.RELEASE.jar: 2.2.2.RELEASE] в org.springframework.boot.SpringApplication.refre sh (SpringApplication. java: 747) [spring-boot-2.2.2.RELEASE .jar: 2.2.2.RELEASE] в org.springframework.boot.SpringApplication.refreshContext (SpringApplication. java: 397) [spring-boot-2.2.2.RELEASE.jar: 2.2.2.RELEASE] в org. springframework.boot.SpringApplication.run (SpringApplication. java: 315) [spring-boot-2.2.2.RELEASE.jar: 2.2.2.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication. java: 1226) [spring-boot-2.2.2.RELEASE.jar: 2.2.2.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication. java: 1215) [spring-boot-2.2.2 .RELEASE.jar: 2.2.2.RELEASE] в jpa.JpaExample.main (JpaExample. java: 10) [классы:: na] в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8. 0_232] at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. java: 62) ~ [na: 1.8.0_232] at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces sorImpl. java: 43) ~ [na: 1.8.0_232] в java .lang.reflect.Method.invoke (Method. java: 498) ~ [na: 1.8.0_232] в org.springframework. boot.devtools.restart.RestartLauncher.run (RestartLauncher. java: 49) [spring-boot-devtools-2.2.2.RELEASE.jar: 2.2.2.RELEASE] Причина: org.hibernate.AnnotationException: нет идентификатора указано для объекта: jpa.tenants.DataSourceConfig в org.hibernate.cfg.InheritanceState.determineDefaultAccessType (InheritanceState. java: 266) ~ [hibernate-core-5.4.9.Final.jar: 5.4.9.Final] в org.hibernate.cfg.InheritanceState.getElementsToProcess (InheritanceState. java: 211) ~ [hibernate-core-5.4.9.Final.jar: 5.4.9.Final] в org.hibernate.cfg.AnnotationBinder.bindClass ( AnnotationBinder. java: 781) ~ [hibernate-core-5.4.9.Final.jar: 5.4.9.Final] в org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies (AnnotationMcessorItaSata.ImpataSata 1042 *: 254) ~ [hibernate-core-5.4.9.Final.jar: 5.4.9.Final] at org.hibernate.boot.model.process.spi.MetadataBuildingProcess $ 1.processEntityHierarchies (MetadataBuildingProcess. java: 230 ) ~ [hibernate-core-5.4.9.Final.jar: 5.4.9.Final] в org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete (MetadataBuildingProcess. java: 273) ~ [hibernate- core-5.4.9.Final.jar: 5.4.9.Final] в org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata (EntityManagerFactoryBuilderImpl. java: 1202) ~ [hibernate-core-5.4.9.Final .jar: 5.4.9.Final] в org.hibernate.jpa.boot.interna l.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl. java: 1233) ~ [hibernate-core-5.4.9.Final.jar: 5.4.9.Final] в org.springframework.orm.jpa.vendor.JP . java: 58) ~ [spring-orm-5.2.2.RELEASE.jar: 5.2.2.RELEASE] в org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory (LocalContainerEntityManagerFactory spring-orm-5.2.2.RELEASE.jar: 5.2.2.RELEASE] в org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory (AbstractEntityManagerFactoryBean. java: 391ELE] [5.21RE] [Spring-or .jar: 5.2.2.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet (AbstractEntityManagerFactoryBean. java: 378) ~ [spring-orm-5.2.2.RELEASE.jar: 5.2.2R. в org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet (LocalContain erEntityManagerFactoryBean. java: 341) ~ [spring-orm-5.2.2.RELEASE.jar: 5.2.2.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitableBew ) ~ [spring-beans-5.2.2.RELEASE.jar: 5.2.2.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory. java: 17-beans] - 1792 5.2.2.RELEASE.jar: 5.2.2.RELEASE] ... опущен 21 общий кадр
'This is my DataSourceConfig Class:-'
package jpa.tenants;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import org.hibernate.annotations.Table;
import org.springframework.data.annotation.Id;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
@Table(appliesTo= "DATASOURCECONFIG")
public class DataSourceConfig {
@Id
@JsonIgnore
@Column(name="id", nullable=false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String url;
private String username;
private String password;
private String driverClassName;
private boolean initialize;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public boolean isInitialize() {
return initialize;
}
public void setInitialize(boolean initialize) {
this.initialize = initialize;
}
}
----------------------------------------
----------
' Any help is highly appriciated thanks..'