1

最近、Oracle11gのJDBCドライバーをからojdbc14.jarにアップグレードしましたojdbc6.jar。ただし、次の基準クエリは機能しなくなりました。

criteria = ...
criteria = criteria.createAlias("contract", "contract")
    .add(Restrictions.disjunction()
    .add(Restrictions.isNull("contract.dateend"))
    .add(Restrictions.gt("contract.dateend", new Date())));

これは、結果を、まだ実行中のコントラクトに関連付けられているエンティティに制限します。

次の例外が発生します。

...
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    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.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
    at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:369)
    at <<my method which creates the criteria query>>
    ... 61 more
Caused by: java.sql.SQLException: year out of range.
    at oracle.jdbc.driver.DateCommonBinder.setOracleCYMD(OraclePreparedStatement.java:19241)
    at oracle.jdbc.driver.TimestampBinder.bind(OraclePreparedStatement.java:19520)
    at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:3137)
    at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:2355)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3579)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
    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)
    ... 101 more

前に述べたように、それはまだ古いドライバーでうまく動作します。対応するデータベース列のタイプは、Hibernateによって次DATEのようにマップされることになっています。java.util.Date

<property name="dateend">
    <column name="DATEEND" length="7" />
</property>

この列のHibernateマッピングを変更する必要がありますか?

よろしくお願いします、レイナー。

4

1 に答える 1

2

この動作の理由が見つかりました。クラスパスには両方のバージョンの JDBC ドライバーがありました。Tomcat lib フォルダー内の lib のみを更新しました。warただし、私のアーカイブにはまだ古いバージョンがありました。これによりエラーが発生しました

于 2013-01-30T09:26:01.743 に答える