2

私のDAOメソッドの1つには、次のメソッドが含まれています。

@Override
public boolean isAvailable(String code) {
    Criteria criteria = getSession().createCriteria(MyEntity.class);
    cr.add(Restrictions.eq("code", code).ignoreCase());
    cr.setProjection(Projections.rowCount());
    Long rowCount = (Long) cr.uniqueResult();
    return (rowCount > 0) ? true : false;
}

最後の行で、次の例外がスローされます。

org.hibernate.exception.DataException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:102)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2452)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
at org.hibernate.loader.Loader.list(Loader.java:2187)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1706)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:369)

code、このテーブルの主キーです。Hibernate はコンソールで select コマンドを生成しています。データベースの SQL コンソールでこの select コマンドをチェックすると、正しい値が返されます。それで、私は何を間違っていますか?

4

2 に答える 2

1

この他の質問を見てください。メソッドuniqueResultは少なくとも aNumberを返します。次に、これを試してください。

long rowCount = ((Number)cr.uniqueResult()).longValue();
return (rowCount > 0) ? true : false;
于 2012-10-25T13:56:50.017 に答える
0

私の問題の解決策は非常にトリッキーでした。上記の問題の私のメソッドのパラメーターcodeは、解決への鍵でした。最初に、Hibernate エンティティ クラスのこのパラメータに対応する列があり、5 符号長の varchar として定義されています。その間、私はその長さを 2 記号だけに変更しなければなりませんでした。しかし、私はまだ5つの記号文字列の長さでメソッドを呼び出していました. そして、これが私のエラーが発生した理由です。varchar の長さを 5 つの記号に再度変更しましたが、現時点ではすべて問題ありません。

于 2013-01-13T01:14:03.823 に答える