通过字段 sessionFactory 表示的创建 bean 不满足依赖关系时出错
Error creating bean unsatisfied dependency expressed through field sessionFactory
我遇到以下错误,它说 SECU
table 中不存在列。但问题是我真的不需要 table 中的这一列,因为我只需要 NONSECU
table 中的这一列,仅在 NONSECU
class 中引用.
有什么方法可以在 getbean 方法或其他地方摆脱它吗?
`[main] WARN org.springframework.context.annotation.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'IsmaImp': Unsatisfied dependency expressed through field 'sessionFactory': Error creating bean with name 'sessionFactory' defined in baag.betl.dbimporter.esmatrans.SpringConfiguration: Invocation of init method failed; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing column [preTradLrgInScaleThrshld] in table [SECU]; nested exception is org.springframework.beans.factory.BeanCreationException:
@配置
@ComponentScan("baag.betl.dbimporter.Ismatr")
@EnableTransactionManagement
public class SpringConfiguration {
@Autowired
private Environment env;
@Bean
public DataSource dataSource() {
return createDatasource("dwh.");
}
private DriverManagerDataSource createDatasource(String propertyPrefix) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(propertyPrefix + "driver"));
dataSource.setUrl(env.getRequiredProperty(propertyPrefix + "jdbc"));
dataSource.setUsername(env.getRequiredProperty(propertyPrefix + "user"));
dataSource.setPassword(env.getRequiredProperty(propertyPrefix + "pwd"));
return dataSource;
}
@Bean
public Properties hibernateProperties() {
Properties properties = new Properties();
properties.put(AvailableSettings.DIALECT, env.getRequiredProperty("hibernate.dialect"));
properties.put(AvailableSettings.SHOW_SQL, env.getRequiredProperty("hibernate.show_sql"));
properties.put(AvailableSettings.STATEMENT_BATCH_SIZE, env.getRequiredProperty("hibernate.batch.size"));
properties.put(AvailableSettings.HBM2DDL_AUTO, env.getRequiredProperty("hibernate.hbm2ddl.auto"));
properties.put(AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS, env.getRequiredProperty("hibernate.current.session.context.class"));
return properties;
}
@Bean
public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setAnnotatedClasses(Secu.class, NonSecu.class);
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
}
如果您想忽略某些字段的列映射,只需将它们声明为 Transient
像这样:
@Entity
@Table(name = "SECU")
public class SECU implements Serializable {
@Transient
protected BigDecimal preTradLrgInScaleThrshld;
此字段不会持久化,并且始终具有空值 post 加载。
我遇到以下错误,它说 SECU
table 中不存在列。但问题是我真的不需要 table 中的这一列,因为我只需要 NONSECU
table 中的这一列,仅在 NONSECU
class 中引用.
有什么方法可以在 getbean 方法或其他地方摆脱它吗?
`[main] WARN org.springframework.context.annotation.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'IsmaImp': Unsatisfied dependency expressed through field 'sessionFactory': Error creating bean with name 'sessionFactory' defined in baag.betl.dbimporter.esmatrans.SpringConfiguration: Invocation of init method failed; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing column [preTradLrgInScaleThrshld] in table [SECU]; nested exception is org.springframework.beans.factory.BeanCreationException:
@配置 @ComponentScan("baag.betl.dbimporter.Ismatr") @EnableTransactionManagement public class SpringConfiguration {
@Autowired
private Environment env;
@Bean
public DataSource dataSource() {
return createDatasource("dwh.");
}
private DriverManagerDataSource createDatasource(String propertyPrefix) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getRequiredProperty(propertyPrefix + "driver"));
dataSource.setUrl(env.getRequiredProperty(propertyPrefix + "jdbc"));
dataSource.setUsername(env.getRequiredProperty(propertyPrefix + "user"));
dataSource.setPassword(env.getRequiredProperty(propertyPrefix + "pwd"));
return dataSource;
}
@Bean
public Properties hibernateProperties() {
Properties properties = new Properties();
properties.put(AvailableSettings.DIALECT, env.getRequiredProperty("hibernate.dialect"));
properties.put(AvailableSettings.SHOW_SQL, env.getRequiredProperty("hibernate.show_sql"));
properties.put(AvailableSettings.STATEMENT_BATCH_SIZE, env.getRequiredProperty("hibernate.batch.size"));
properties.put(AvailableSettings.HBM2DDL_AUTO, env.getRequiredProperty("hibernate.hbm2ddl.auto"));
properties.put(AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS, env.getRequiredProperty("hibernate.current.session.context.class"));
return properties;
}
@Bean
public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setAnnotatedClasses(Secu.class, NonSecu.class);
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
}
如果您想忽略某些字段的列映射,只需将它们声明为 Transient
像这样:
@Entity
@Table(name = "SECU")
public class SECU implements Serializable {
@Transient
protected BigDecimal preTradLrgInScaleThrshld;
此字段不会持久化,并且始终具有空值 post 加载。