2011-08-09 4 views
0

저는 실제로 JPA2.0을 배우고 있습니다. 다음과 같은 오류가있어서 IDE로 Eclipse를 사용하고 있습니다. JPA 2.0, 어떻게하면 다음 2 가지 오류를 해결할 수 있습니까?

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148) 
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:307) 
    at com.banking.core.persistence.utils.EntityManagerTest.main(EntityManagerTest.java:38) 
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.loader.Loader.doList(Loader.java:2536) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
    at org.hibernate.loader.Loader.list(Loader.java:2271) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) 
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:274) 
    ... 1 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'loanaccoun0_.id' in 'field list' 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2281) 
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1953) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:802) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
    at org.hibernate.loader.Loader.doList(Loader.java:2533) 
    ... 9 more 

이 내가 지금 사용하고 쿼리

...

LoanAccount.class

@Entity 
@Table(schema="BANKING_CORE", name="NUMBER_OF_PAYMENTS") 
@DiscriminatorValue("LA") 
@NamedQuery(name = "LoanAccount.findByNumberofPayments", query = "SELECT lc from LoanAccount lc WHERE lc.numberOfPayments = :number_of_payments") 

이것은 쿼리 자체

entitymanger.class입니다

LoanAccount lc = (LoanAccount) em.createNamedQuery("LoanAccount.findByNumberofPayments").setParameter("number_of_payments", 25).getSingleResult(); 
System.out.println(lc.getNumberOfPayments()+" "+lc.getCutOffDate()); 

답변

1

먼저 엔티티를 업데이트했지만 테이블을 다시 만들지 않은 것처럼 보입니다. 당신의 최대 절전 모드 설정에서 반드시 설정을 확인 hbm2dll.auto 중 하나 update 또는

create-drop 마지막으로

은 또한 당신의 최대 절전 설정에 show_sql을 활성화 FROM LoanAccount WHERE numberOfPayment = :number_of_payments에 쿼리를 변경하고, 생성 된 SQL이 무엇인지 볼 수 있습니다 설정합니다.

관련 문제