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

まず、エンティティを更新したようですが、テーブルは再作成されていないようです。あなたの休止状態の設定の設定を確認して、いずれかであるupdateまたはcreate-drop

が最後にFROM LoanAccount WHERE numberOfPayment = :number_of_payments

にクエリを変更hbm2dll.autoを設定する。また、あなたの休止状態の設定でshow_sqlを活性化し、生産SQLが何であるかを参照してください。

関連する問題