0

Je développe en utilisant spring-boot, application spring-batch où je lis les données de la table source en utilisant HibernatePagingItemReader. Quand je cours le code je suis en dessous de l'exception. Voici le code de mon application. Veuillez noter que mon nom de table dans la base de données est "OLDUSER" et que mon nom d'entité est "Olduser". J'ai déjà utilisé toutes les suggestions possibles sur stackoverflow pour des questions similaires mais aucune d'entre elles ne me travaille. Merci pour l'aide.Lancement HibernatePagingItemReader La table QuerySyntaxException n'est pas mappée

org.hibernate.hql.internal.ast.QuerySyntaxException: Olduser is not mapped [FROM Olduser o where o.id>=7501 and o.id <= 15000 order by o.id ASC] 
at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79) 
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76) 
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150) 

classe Domaine: Olduser.java:-

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
@Table(name="OLDUSER") 
@Entity 
public class Olduser { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="ID") 
    int id; 
    @Column(name="USERNAME") 
    String username; 
    @Column(name="PASSWORD") 
    String password; 
    @Column(name="AGE") 
    int age; 

    public Olduser(int id, String username, String password, int age) { 
     super(); 
     this.id = id; 
     this.username = username; 
     this.password = password; 
     this.age = age; 
    } 

code ItemReader: -

 @Bean 
@StepScope 
public HibernatePagingItemReader<Olduser> hibernateUserItemReader(
     @Value("#{stepExecutionContext[fromId]}") final String fromId, 
     @Value("#{stepExecutionContext[toId]}") final String toId, 
     @Value("#{stepExecutionContext[name]}") final String name) throws Exception { 

    LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean(); 
    factoryBean.setDataSource(this.dataSource); 
    factoryBean.afterPropertiesSet(); 
    SessionFactory sessionFactory = factoryBean.getObject(); 

    HibernatePagingItemReader<Olduser> hibernateReader=new HibernatePagingItemReader<>(); 
    hibernateReader.setFetchSize(chunkSize); 
    hibernateReader.setQueryString("FROM Olduser o where o.id>=" + fromId + " and o.id <= " + toId +" order by o.id ASC"); 
    hibernateReader.setSessionFactory(sessionFactory); 
    hibernateReader.setUseStatelessSession(false); 
    hibernateReader.setSaveState(false); 
    hibernateReader.afterPropertiesSet(); 
    return hibernateReader; 
} 
+0

Vérifiez si la réponse à l'adresse https://stackoverflow.com/questions/18629702/org-hibernate-mappingexception-unknown-entity-in-spring-ou m? noredirect = 1 & lq = 1 est bon pour votre problème –

+0

Bonjour @LucaBassoRicci, Merci pour votre aide, j'ai déjà trouvé la solution du problème.J'ai ajouté les paquets annotés et aussi je dois ajouter le bean JPATransactionManager pour gérer la transaction pour LocalSessionFactoryBean . Je posterai la solution complète maintenant. – Abhilash

Répondre

0

j'ai trouvé la solution de ce qui précède. J'ai manqué d'ajouter des paquets annotés dans le LocalSessionFactoryBean qui est la raison pour laquelle le contexte n'a pas pu localiser la classe Entity. Il me manquait aussi les classes transactionManager qui doivent gérer la transaction. Voici l'extrait de code ci-dessous.

créé un haricot séparé sessionFactory et a ajouté le même dans hibernatePagingItemReader

hibernateReader.setSessionFactory(sessionFactory().getObject()); 

SessionFactory Bean: -

@Bean 
public LocalSessionFactoryBean sessionFactory() throws IOException{ 
    LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean(); 
    factoryBean.setDataSource(this.dataSource); 
    factoryBean.setPackagesToScan("package name"); 
    factoryBean.afterPropertiesSet(); 
    return factoryBean; 
} 

haricot TransactionManager: -

 @Bean 
public JpaTransactionManager transactionManager() { 
    return new JpaTransactionManager(); 
}