2017-08-28 37 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(); 
} 
相關問題