1

次のコードを実行しながら、SQL Server 2008 からデータにアクセスするために Hibernate を使用しています。

Session session = sessionFactory.openSession();
String qry="select Form_Id,SUBSTRING( 
       (SELECT ( '' + t2.Form_Layout_Txt) FROM Form_Layout_Info t2  
            WHERE t1.Form_Id = t2.Form_Id " +
            " GROUP BY Form_Layout_Txt FOR XML path('') ), 1,1000000000) 
             FROM Form_Layout_Info t1 GROUP BY  Form_Id";

SQLQuery query = session.createSQLQuery(qry);
recordList = query.list();

私の休止状態のプロパティは

hibernate.connection.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver
hibernate.connection.url=jdbc:sqlserver://localhost:1433;databaseName=abc;integratedSecurity=false;
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.connection.username=sa
hibernate.connection.password=p123asc

次のエラーを受け取りました

No Dialect mapping for JDBC type: -9 

問題を解決する方法。

4

3 に答える 3

2

hibernate.dialect=org.hibernate.dialect.SQLServerDialectSQLサーバーの構成で提供する必要があります。

hibernate.cfg.xml で次のように指定します。

<hibernate-configuration>
    <session-factory name="session-factory">
        .....
        <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
        ....
 </session-factory>
</hibernate-configuration>

またはプロパティファイルで次のように:

hibernate.dialect=org.hibernate.dialect.SQLServerDialect

私はあなたがどちらの方法を使用しているのか分からないので、私が知っている両方を投稿しました。

ここであなたの問題に対する2つの解決策を見つけました:

  1. Microsoft が提供する ms sql サーバー jdbc ドライバーを使用してドライバーを jTDS に変更してみてください。jTDS ではこの問題は発生しませんが、この問題が発生する可能性があります。

  2. hibernate クエリに明示的に「addScalar」する必要がある場合があります。次のようなものがあるかもしれません:

    sess.createSQLQuery("SELECT * FROM CATS"); // 変更してみてください: sess.createSQLQuery("SELECT * FROM CATS") .addScalar("ID", Hibernate.LONG) .addScalar("NAME", Hibernate.STRING) .addScalar("BIRTHDATE", Hibernate.DATE)

于 2013-01-03T11:38:02.203 に答える
1

この問題は、データを返すときに行われる型マッピングに関連しています。そして、その特定のデータ型のマッピングは Dialect には存在しません。

https://forum.hibernate.org/viewtopic.php?f=1&t=959583

休止状態のデータ型 -

http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/type/StandardBasicTypes.html

于 2013-01-03T12:54:27.443 に答える
0

このエラーは、休止状態が JDBC 型「NVARCHAR」を休止状態の型にマップする方法を認識していないことを意味します。

解決策 1: addScalar を次のように使用します。

Session session = sessionFactory.openSession();
String qry="select Form_Id,SUBSTRING( 
   (SELECT ( '' + t2.Form_Layout_Txt) as formLayoutTxt FROM Form_Layout_Info t2  
        WHERE t1.Form_Id = t2.Form_Id " +
        " GROUP BY Form_Layout_Txt FOR XML path('') ), 1,1000000000) 
         FROM Form_Layout_Info t1 GROUP BY  Form_Id";

SQLQuery query = session.createSQLQuery(qry).addScalar("formLayoutTxt", StringType.INSTANCE);
recordList = query.list();

解決策 2: ダイアレクトで Hibernate タイプを登録する

public class MySQLServerDialect extends SQLServerDialect {

  public MySQLServerDialect() {
    super();

    // Register mappings
    registerHibernateType(Types.NVARCHAR, StringType.INSTANCE.getName());
  }
}

詳細については、こちらをご覧ください

于 2014-09-11T02:35:40.293 に答える