Spring Batch HibernateItemWriter Событие «Не сущность», хотя EntityScan установлен (без конфигурации xml) - PullRequest
0 голосов
/ 16 января 2020

У меня возникли проблемы с настройкой HibernateItemWriter в моей программе Spring-Batch.

Вот как выглядит мой 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>]

Я не хочу создавать постоянство. xml, поэтому я хочу использовать аннотацию @EntityScan:

1 Ответ

0 голосов
/ 16 января 2020

Вы можете обратиться по ссылке ниже, может быть, это поможет,

https://springbootdev.com/2017/11/13/what-are-the-uses-of-entityscan-and-enablejparepositories-annotations/

@ EntityScan (basePackages = {"com.springbootdev.domain.entity "}) @EnableJpaRepositories (basePackages = {" com.springbootdev.domain.repository "})

...