-1

テーブルから行をフェッチするために休止状態を使用しています。

List<Work> W= sessionFactory.getCurrentSession().createSQLQuery("Select * from T_WORK ").addEntity(Work.class).list();

このクエリは正常に機能します。

しかし、以下のクエリはうまくいきません。

List<Work> W= sessionFactory.getCurrentSession().createSQLQuery("Select * from T_WORK WHERE STATUS = 5 ").addEntity(Work.class).list();

としてエラーが発生しています。

could not execute query

Caused by: java.sql.SQLException: Invalid column name
        at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3711)
        at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2763)
        at oracle.jdbc.driver.OracleResultSet.getTimestamp(OracleResultSet.java:512)
        at org.apache.commons.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
        at org.apache.commons.dbcp.DelegatingResultSet.getTimestamp(DelegatingResultSet.java:300)
        at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$2.doExtract(TimestampTypeDescriptor.java:62)
        at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:254)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:250)
        at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:230)
        at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:331)
        at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283)
        at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527)
        at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455)
        at org.hibernate.loader.Loader.getRow(Loader.java:1355)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611)
        at org.hibernate.loader.Loader.doQuery(Loader.java:829)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
        at org.hibernate.loader.Loader.doList(Loader.java:2542)

私は Oracle を使用しており、ステータス列は数値データ型です。

作業項目クラスで

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "STATUS_CODE", nullable = false)  
private Status status;

どこが間違っていますか?前もって感謝します。

どうすればこれを達成できますか?

4

2 に答える 2

1

ネイティブSQLクエリを使用しています。つまり、フィールドのSQL名を使用する必要があります。STATUS_CODEの代わりに使用しSTATUSます。

すなわち...createSQLQuery("Select * from T_WORK WHERE STATUS_CODE = 5 ")...

于 2013-01-14T13:55:00.307 に答える
0

hqlではなくsqlを使用しています...したがって、pojoクラス変数名ではなく、dbテーブルと同じようにクエリパラメーター名を使用する必要があります...

于 2013-01-14T14:06:52.247 に答える