2017-08-28 43 views
0

我正在开发使用spring-boot,spring-batch应用程序,我正在使用HibernatePagingItemReader从源表读取数据。当我运行代码时,我得到了异常。以下是我的应用程序代码。请注意,我在数据库中的表名是“OLDUSER”,而我的实体名称是“Olduser”。我已经使用了所有可能的建议,通过stackoverflow的类似的问题,但他们都没有工作。 感谢您的帮助。HibernatePagingItemReader引发QuerySyntaxException表未映射

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) 

域类: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; 
    } 

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

检查答案为:https:/ /stackoverflow.com/questions/18629702/org-hibernate-mappingexception-unknown-entity-in-spring-or m @ noredirect = 1&lq = 1对你的问题有好处 –

+0

嗨@LucaBassoRicci,感谢您的帮助,我已经找到了问题的解决方案。我已经添加了注释包并且还必须添加bean JPATransactionManager来管理LocalSessionFactoryBean事务。我现在将发布完整的解决方案。 – Abhilash

回答

0

我发现上面的解决方案。我错过了在LocalSessionFactoryBean中添加注释包,这是上下文无法找到实体类的原因。另外我错过了管理事务的transactionManager类。以下是代码片段。

创建一个单独的bean SessionFactory的,并添加了相同的hibernatePagingItemReader

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

SessionFactory的豆: -

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

事务管理的bean: -

 @Bean 
public JpaTransactionManager transactionManager() { 
    return new JpaTransactionManager(); 
} 
相关问题