1

query.list()行で次の例外が発生しています。

org.hibernate.MappingException: No Dialect mapping for JDBC type: -4
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:81)
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:369)
    at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:559)
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485)
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
    at org.hibernate.loader.Loader.doQuery(Loader.java:662)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    at org.hibernate.loader.Loader.doList(Loader.java:2211)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
    at org.hibernate.loader.Loader.list(Loader.java:2090)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)

以下は私の設定ファイルです:

<property name="hibernate.connection.driver_resource">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">mysql</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydatabase</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.default_schema">mydatabase</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

アプリケーションをEclipseIDEで実行しようとすると、この例外は発生しませんが、アプリケーションのjarを作成して実行すると、取得するのは私だけです。前もって感謝します...

4

2 に答える 2

5

データベースが、Hibernateタイプにマップできない奇妙なタイプのカスタムSQLクエリの結果を返すことがあります(特に、で式を使用する場合select)。

問題のあるクエリを見つけて、それに明示的なキャストを追加する必要があります。

例えば

Object o = session.createSQLQuery("select 2*2").uniqueResult();

そのような問題を引き起こす可能性があります。次のように修正できます。

Object o = session.createSQLQuery("select cast(2*2 as int)").uniqueResult();
于 2012-10-20T06:49:37.787 に答える
0

解決策を得ました:

クエリを変更するだけで、特定のレコードを選択するのではなく、レコード全体をフェッチしています。たとえば、テーブルから、テーブルからのselectスクリプトを使用する代わりに、テーブルオブジェクトからそれぞれのフィールド(ここではスクリプト)の値を取得します。これで正常に動作しています。

于 2012-10-20T11:50:20.733 に答える