java - 即使设置了 EntityScan,Spring Batch HibernateItemWriter “不是实体”(没有 xml 配置)
问题描述
我在 Spring-Batch 程序中设置 HibernateItemWriter 时遇到了一些麻烦。
这就是我的 HibernateConfig.class 的样子:
@Configuration
@EnableTransactionManagement
public class HibernateConfig {
@Autowired
private ApplicationContext context;
@Bean
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
factoryBean.setConfigLocation(context.getResource("mypath/hibernate.cfg.xml"));
return factoryBean;
}
@Bean
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(getSessionFactory().getObject());
return transactionManager;
}
和我相关的 hibernate.cfg.xml
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="log4j.logger.org.hibernate=info">info</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.SQLServer2012Dialect</property>
<property name="hibernate.hikari.driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.hikari.jdbcUrl">jdbc:sqlserver://server;databaseName=dbname</property>
<property name="hibernate.hikari.username">no</property>
<property name="hibernate.hikari.password">no</property>
<property name="hibernate.hikari.poolName">Mssql-Pool</property>
<property name="hibernate.hikari.connectionTimeout">10000</property>
<property name="hibernate.hikari.minimumIdle">10</property>
<property name="hibernate.hikari.maximumPoolSize">200</property>
<property name="hibernate.hikari.idleTimeout">300000</property>
</session-factory>
</hibernate-configuration>
这些是我在“应用程序”类中使用的注释:
@SpringBootApplication
@EnableBatchProcessing
@EntityScan(basePackages = "mypackagespath")
@Import(DataSourcesConfig.class)
public class Application extends SpringBootServletInitializer ...
这就是我的 HibernateWriter 的样子:
@Bean
public HibernateItemWriter<MyEntity> writer() {
LocalSessionFactoryBean localSessionFactoryBean = hibernatecfg.getSessionFactory();
HibernateItemWriter<MyEntity> myWriter = new HibernateItemWriter<>();
myWriter.setSessionFactory(localSessionFactoryBean.getObject());
myWriter.afterPropertiesSet();
return myWriter;
}
我的域类有@Entity 和@Table 注释,EntityScan 包路径很好。但不知何故,Hibernate 找不到带注释的实体并给我以下错误:
exitStatus=exitCode=FAILED;exitDescription=java.lang.IllegalArgumentException: Not an entity [class <packages.MyEntity.class>]
我不想创建persistence.xml,这就是我想使用@EntityScan Annotation 的原因:
解决方案
您可以参考下面的链接,可能会有所帮助,
@EntityScan(basePackages = {"com.springbootdev.domain.entity"}) @EnableJpaRepositories(basePackages = {"com.springbootdev.domain.repository"})
推荐阅读
- excel - 拆分功能 - 按字符串划分单元格
- python - 如何按照文件名的正确数字顺序对文件进行分类
- json - TypeScript 中用括号代替键的对象是什么意思?
- reactjs - 如何在样式组件中添加功能
- node.js - 如何解决未捕获(承诺)错误?
- python - Telegram Bot 部署到 Heroku 的问题
- powershell - 如何在一个对象下加入两条不同的路径
- python - Kivy for android:手机上的opencv无法加载视频
- firebase - 如何为我的颤振项目找到兼容的依赖版本?(Firebase_auth、cloud_firestore、intl、flutter_dialogflow_v2)
- apache-flink - Flink 在 Process Time 或 Event Time 中偶尔处理记录